我正在尝试使用gzip将位图转换为base64。
我尝试了解决方案here,但我收到此错误 GZIP无法解析或不是字段
我的解决方案正在运行,但图片正在底部剪切
这是我的代码:
Bitmap myBitmap = BitmapFactory.decodeFile("\path\to\file.jpg");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
GZIPOutputStream gzipOstream=null;
try {
gzipOstream=new GZIPOutputStream(stream);
} catch (IOException e) {
e.printStackTrace();
}
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, gzipOstream);
byte[] byteArry=stream.toByteArray();
String encodedImage = Base64.encodeToString(byteArry, Base64.NO_WRAP);
try {
gzipOstream.close();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
这段代码可能会使图像丢失数据,还是服务器端的东西?
答案 0 :(得分:2)
调用mBitmap.compress();
调用gzipOstream.flush();
后,这可以保证输出字节流包含所有内容。然后,您的toByteArray();
将获取当前缺失的数据。
试试这个:
Bitmap myBitmap = BitmapFactory.decodeFile("\path\to\file.jpg");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
try {
GZIPOutputStream gzipOstream = null;
try {
gzipOstream = new GZIPOutputStream(stream);
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, gzipOstream);
gzipOstream.flush();
} finally {
gzipOstream.close();
stream.close();
}
} catch (IOException e) {
e.printStackTrace();
stream = null;
}
if(stream != null) {
byte[] byteArry=stream.toByteArray();
String encodedImage = Base64.encodeToString(byteArry, Base64.NO_WRAP);
// do something with encodedImage
}