注:代码来自http://blog.csdn.net/infsafe/article/details/7744582,稍微做了修改。
微信分享图片限制为32k,有场景需分享大图给微信,直接根据字节数进行压缩后,分享到微信,从网上图片已完全失真:
代码如下:
private static Bitmap imageZoom(Bitmap src_bitmap) {
// 图片允许最大空间 单位:KB
double maxSize = IMAGE_SIZE;//32
// 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
src_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
// 将字节换成KB
double mid = b.length / 1024;
// 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
if (mid > maxSize) {
// 获取bitmap大小 是允许最大大小的多少倍
double i = mid / maxSize;
// 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
Bitmap bitmap = zoomImage(src_bitmap, src_bitmap.getWidth() / Math.sqrt(i),
src_bitmap.getHeight() / Math.sqrt(i));
return bitmap;
}
return src_bitmap;
}
后经测试发现将代码:
src_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
改为:
src_bitmap.compress(Bitmap.CompressFormat.JPEG, 10, baos);
既可满足需求,在微信中显示的图如下: