我想将图像从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);
答案 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/
(它是法语,但有详细的代码示例)