Изображение в альбомной ориентации вместо портретного режима после масштабирования

У меня есть изображение, и я хочу уменьшить его, используя imgscalr [1].
Размер исходного изображения составляет 1836 x 3264 (поэтому это портретный режим), а конечное разрешение - 1336 x 768.
Ошибка состоит в том, что после масштабирования изображение больше не в портретном режиме, а в портретном. Само масштабирование работает как шарм.
Мой код:

BufferedImage src = ImageIO.read(new File("sourceimage.jpg"));
BufferedImage scaled = Scalr.resize(src, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_HEIGHT, 1336, 768, Scalr.OP_ANTIALIAS);
ImageIO.write(scaled, "jpg", f);

Метаданные файла выглядят правильно (ориентация = 1).
Мое объяснение заключается в том, что при уменьшении портретного изображения оно остается портретным после процесса масштабирования.

Я также попробовал некоторые другие библиотеки / классы, подобные этому: https://frickelblog.wordpress.com/2009/06/08/fast-image-scaling-in-java/ но эффект тот же.

Не могли бы вы мне помочь? Этот сводит меня с ума! Я уверен, что есть только деталь, которую нужно изменить.

[1] http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/

редактировать:
Вот оригинальное изображение:
уменьшенная версия:

1 ответ

Решение

Так что проблема не с ImgScar но с ImageIO, ImageIO не будет читать ориентацию изображения, поэтому оно было прочитано как 3264x1836 - Пейзаж.

В итоге я повернул изображение на 90 градусов...

        BufferedImage src = ImageIO.read(new File("/Users/swhitehead/Downloads/original.jpg"));

        System.out.println(src.getWidth() + "x" + src.getHeight());
        BufferedImage rotated = Scalr.rotate(src, Scalr.Rotation.CW_90, Scalr.OP_ANTIALIAS);
        BufferedImage scaled = Scalr.resize(rotated, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_HEIGHT, 1336, 768, Scalr.OP_ANTIALIAS);
        System.out.println(scaled.getWidth() + "x" + scaled.getHeight());
        ImageIO.write(scaled, "jpg", new File("Scaled.jpg"));

Который, кажется, устранил "эту" проблему.

Вы можете взглянуть на ImageIO.read() всегда поворачивает мою загруженную картинку для более подробной информации.

Браузеры реализуют <img>по-другому.
Firefox не будет читать EXIF-информацию, поэтому портретные изображения отображаются в альбомной ориентации.
Chrome считывает EXIF-информацию, поэтому портрет остается вертикальным.

Я исправил это с помощью этого объявления CSS:
image-orientation: from-image;

Другие вопросы по тегам