如何将jpg图片压缩到确切尺寸或更小?

时间:2019-07-03 12:23:20

标签: java

如果大于1MB到1MB或更小,我想压缩jpg文件。 参数压缩setCompressionQualityImageWriteParam中从0.0f到1.0f的质量未明确定义。

质量= 0.5f可以将图像压缩5倍,7倍,1.2倍取决于图像。不是每个人预期的两倍。

那么,如何选择压缩图像的大小?也许有任何开源库?

UPD: 压缩示例:

public static byte[] write(BufferedImage image, String formatName, int dpi, float quality) {
    try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
        ImageIOUtil.writeImage(image, formatName, outputStream, dpi, quality);
        return outputStream.toByteArray();
    } catch (IOException ex) {
        return null;
    }
}

public static void main(String[] args) {
    BufferedImage bufImg = null;
    try
    {
        bufImg = ImageIO.read(new File("myfile"));
    } catch (IOException e){e.printStackTrace();}

    for(int i = 0; i < 10; i++) {
        byte[] arr = write(bufImg, "jpg", 300, 0.1f*i);
        double fl = (double)arr.length/(double)MY_FILE_SIZE_BYTES;

        System.out.println(fl + " " + (0.1f*i));
    }
}

为此,我使用org.apache.pdfbox.tools.imageio.ImageIOUtil,ImageIOUtil在内部使用ImageWriter和ImageWriteParam。

0 个答案:

没有答案