根据原始图像分辨率将图像大小调整为低于字节大小的算法

问题描述

是否有一种很好的算法可以根据原始图像尺寸将图像调整为低于文件大小(比如 250kb)?

目前在 Java 中我有

public static byte[] resize(byte[] data,int desiredSize,String type) throws IOException {
        BufferedImage img = arrToBufferedImage(data);
        int factor = 10;
        double aspectRatio = (double) img.getWidth() / (double) img.getHeight();
        while (data.length / 1024 > desiredSize) {
            data = imgToBytes(resize(img,img.getWidth() - factor,(int) (img.getHeight() - (factor / aspectRatio))),type);
            img = arrToBufferedImage(data);
        }
        return data;
}

它只是从宽度中删除 10px 并从高度中删除一些以保持纵横比。
我遇到的问题是,当图像已经很小(比如 260 kb)时,将其缩放 10 px 会使文件大小减少很多,我看到它仅通过删除因子 10 的像素就变成 17 kb。
因此,我正在寻找一种算法,该算法对较小的图像尺寸使用较低的系数,而当图像尺寸较大时,它将使用较大的系数。
我自己尝试过,但我的数学不够好,无法想出这样的公式。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)