Изображение в альбомной ориентации вместо портретного режима после масштабирования
У меня есть изображение, и я хочу уменьшить его, используя 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;