Как сжать изображение JPG до точного размера или чуть меньше? - PullRequest
1 голос
/ 03 июля 2019

Я хочу сжать файл jpg, если он больше 1 МБ или 1 МБ или немного меньше. Качество сжатия параметров от 0,0f до 1,0f в setCompressionQuality в ImageWriteParam четко не определено.

Качество = 0,5f может сжать изображение 5 раз, 7 раз, 1,2 раза зависит от изображения. Не в 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 внутри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...