Как сохранить размер файла изображения JPEG после операций чтения-вращения-записи в Java? - PullRequest
0 голосов
/ 19 марта 2011

Я пытаюсь прочитать изображение JPEG как BufferedImage, повернуть и сохранить его как другое изображение JPEG из файловой системы. Но есть проблема: после этих операций я не могу продолжить файл того же размера.

Здесь код

//read Image
BufferedImage img = ImageIO.read(new File(path));
//rotate Image
BufferedImage rotatedImage = new BufferedImage(image.getHeight(),
            image.getWidth(), BufferedImage.TYPE_3BYTE_BGR);
    Graphics2D g2d = (Graphics2D) rotatedImage.getGraphics();
    g2d.rotate(Math.toRadians(PhotoConstants.ROTATE_LEFT));

    int height=-rotatedImage.getHeight(null);
    g2d.drawImage(image, height, 0, null);
    g2d.dispose();

//Write Image
    Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
    ImageWriter writer = (ImageWriter)iter.next();
    // instantiate an ImageWriteParam object with default compression options
    ImageWriteParam iwp = writer.getDefaultWriteParam();
    try {
        FileImageOutputStream output = null;
        iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        iwp.setCompressionQuality(0.98f);   // an integer between 0 and 1
        // 1 specifies minimum compression and maximum quality

        File file = new File(path);
        output = new FileImageOutputStream(file);
        writer.setOutput(output);
        IIOImage iioImage = new IIOImage(image, null, null);
        writer.write(null, iioImage, iwp);
        output.flush();
        output.close();
        writer.dispose();

Возможно ли вначале получить доступ к параметру сжатия и качеству исходного изображения JPEG. когда я устанавливаю 1 в качестве сжатия, изображение становится больше. В противном случае я устанавливаю 0,9 или меньше, изображение становится меньше. Как я могу обработать размер изображения после этих операций?

Спасибо,

Ответы [ 2 ]

1 голос
/ 19 марта 2011

Что вы имеете в виду - хотите ли вы прочитать степень сжатия исходного файла?

Обратите внимание, что даже при одинаковых настройках сжатия размер файла может отличаться из-за алгоритма сжатия JPEG.Таким образом, повернутое изображение не всегда имеет тот же размер, что и необращенная / оригинальная версия, даже если все параметры (например, степень сжатия, настройки качества и т. Д.) Одинаковы.

0 голосов
/ 19 марта 2011

Если есть действительно способ считывания качества сжатия из метаданных, в качестве последнего средства вы можете использовать бинарный поиск качества. Начните с 0,5, если файл слишком маленький, попробуйте 0,75 и т. Д. (До 5 попыток или около того). Конечно, это немного медленно, но в зависимости от вашего варианта использования все может быть в порядке.

...