2025年Android 对图片进行指定尺寸压缩

Android 对图片进行指定尺寸压缩如图我们可以执行图片压缩到 50kb 大小 一般压缩后的大小会非常接近 50kb 经过无数次测试发现有些也有例外 代码如下 Bitmap originalIcon BitmapFactor decodeFile path if originalIcon null return int coverSize

大家好,我是讯享网,很高兴认识大家。

如图我们可以执行图片压缩到50kb大小,一般压缩后的大小会非常接近50kb 

经过无数次测试发现有些也有例外


讯享网

代码如下:

 Bitmap originalIcon = BitmapFactory.decodeFile(path); if (originalIcon == null)return; int coverSize = originalIcon.getByteCount(); Log.e(TAG, "coverNotif: originalIcon="+originalIcon.getByteCount() ); if (coverSize<10000*10000){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); originalIcon.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 90; while (baos.toByteArray().length / 1024 > 50) { // 循环判断如果压缩后图片是否大于50kb,大于继续压缩 baos.reset(); // 重置baos即清空baos // Log.e(TAG, "compressImage: option="+options ); originalIcon.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中 options -= 10;// 每次都减少10 if (options<=10)break; } Log.e(TAG, "compressImage: 图片大小为:"+baos.toByteArray().length/1024 ); ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中 Bitmap icon = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片 Log.e(TAG, "serverGetPlayInfo: originaliconBytes="+originalIcon.getByteCount() +" 转换后字节数="+icon.getByteCount()); byte[] imageBytes = baos.toByteArray(); byteString = ByteString.copyFrom(imageBytes); Log.e(TAG, "serverGetPlayInfo: 路径="+aaa +" imageBytes字节数="+imageBytes.length); imageBuilder.setPrompt(""); }

讯享网

提示:根据图片路径获取Bitmap,当byteCount >10000*10000时调用compress压缩处理无法达到我们想要的50kb以内且耗费的时间稍长。

小讯
上一篇 2025-04-02 19:42
下一篇 2025-01-05 18:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/22886.html