将Base64编码的String转换回Java Server上的Image文件

时间:2012-03-16 11:32:36

标签: android string image base64

我想将图像从Android发送到服务器。我将图像解码为Base64 String并将其发送到服务器。我使用以下代码将Image转换为String

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);  
    ByteArrayOutputStream bao = new ByteArrayOutputStream();  
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bao);  
    byte [] byteArray = bao.toByteArray();  
    String imageToString=Base64.encodeToString(byteArray,Base64.DEFAULT);  
    return imageToString; 

现在我无法将其转换回服务器端的Image。我试过这个

   byte[] imageBytes=Base64.decode(imageString);  
   InputStream in =  new ByteArrayInputStream(imageBytes);  
   BufferedImage bImageFromConvert = ImageIO.read(in);  
   ImageIO.write(bImageFromConvert, "jpg", new File("D:\\myImage.jpg")); 

我正在获取 Bogus Huffman表定义异常,有时 im = null 异常。请告诉我我犯了什么错误

编辑:错误消息 javax.imageio.IIOException:此行的Bogus Huffman表定义

  BufferedImage bImageFromConvert = ImageIO.read(in); 

2 个答案:

答案 0 :(得分:2)

试试这个

        byte[] imageBytes=Base64.decode(imageString,Base64.NO_WRAP);
        InputStream in = new ByteArrayInputStream(imageBytes);
        Bitmap b = BitmapFactory.decodeStream(in);

答案 1 :(得分:1)

这里可能存在多个问题。我认为第一个是将图像字节转换为String(使用Android环境具有的任何默认编码对它们进行编码)以及将字符串转换回字节而不确保使用相同的文本编码(从而获得相同的字节)。

为什么不直接发送字节?或者更好的是直接通过HTTP多部分表单上传文件。这里有一个教程:

http://flo.dauran.com/194-android-uploader-une-image-sur-une-serveur-web/

(它是法语,但有详细的代码示例)