gpt4 book ai didi

java - 如何压缩图像直到达到固定字节大小

转载 作者:行者123 更新时间:2023-12-02 10:22:59 24 4
gpt4 key购买 nike

我有一个应用程序需要与服务器通信,通过 Base64 表示形式交换图像。由于服务器容量的原因,我只能压缩和发送小于 100KB 的图像。我可以使用以下方法轻松检索图像的大小:

File file= new File(path);
long size = file.length() / 1024; // KB

并显示确切的尺寸。然后我将其解码为位图并使用以下方法对其进行压缩:

int quality= 100;

Bitmap bitmap = BitmapFactory.decodeFile(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
byte[] byteArr = baos.toByteArray();

这里事情变得肮脏了。我无法像以前那样正确检索确切的大小值,因为如果大小> 100KB,那么我需要重新压缩它调整质量。

编辑:忘记提及我已经尝试过 byte.length 方法,但结果大小与之前不同。
在此示例中,我尝试使用 80KB 图像,如 AndroidStudio 控制台中所示:
enter image description here

最佳答案

您可能想使用this接受 Max-Size(以 kb 为单位)进行压缩的库。示例(来自 readme.md):

   Luban.compress(context, file)
.setMaxSize(100) // limit the final image size(unit:Kb)
.setMaxHeight(1920) // limit image height
.setMaxWidth(1080) // limit image width
.putGear(Luban.CUSTOM_GEAR) // use CUSTOM GEAR compression mode
.asObservable()

但是我强烈建议您不要以 Base64 形式发送二进制数据(例如图像),因为它会降低性能并增加大小!最好以二进制形式上传。

如果以上解决方案都不适合您,那么至少尝试使用二分搜索来实现您的方法。

关于java - 如何压缩图像直到达到固定字节大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54189784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com