Есть ли способ указать браузерам соблюдать ориентацию jpeg exif?

Я знаю, что автоматическое вращение файлов JPG отключено в браузерах.

Они не могут включить его, потому что это нарушит макет некоторых веб-сайтов.

Есть ли свойство CSS? или код javascript для этого? или что-то другое? а может решения этой проблемы еще не существует?


person Marc MAURICE    schedule 19.08.2012    source источник
comment
Текущие спецификации CSS игнорируют данные EXIF. Возможным обходным решением является динамическая установка стиля ориентации элементов IMG с помощью скрипта на основе имен файлов предварительно обработанных изображений, которые содержат суффикс, указывающий на правильную ориентацию. например: простые a, b, c, d для 0, 90, -90, 180.   -  person Jay    schedule 20.08.2012
comment
спасибо за совет/идею. Но это все еще требует предварительной обработки. Лучше всего было бы иметь некоторое свойство CSS, чтобы указать браузеру соблюдать ориентацию EXIF. Я предполагаю, что ответ будет в коде браузера.   -  person Marc MAURICE    schedule 01.09.2012
comment
Насколько я могу судить, iOS Safari действительно понимает информацию об ориентации EXIF, по крайней мере, из изображений, сделанных с помощью устройства iOS.   -  person Pointy    schedule 07.03.2013
comment
Я думаю, что лучший ответ здесь: заголовок ="js ориентация exif на стороне клиента, поворот и зеркальное отображение изображений jpeg"> stackoverflow.com/questions/20600800/   -  person sstauross    schedule 09.05.2019


Ответы (7)


CSS-ориентация изображения: исходное изображение

из спецификаций https://www.w3.org/TR/css4-images/#the-image-orientation

6.2. Ориентация изображения на странице: свойство «ориентация изображения»

ориентация изображения: от изображения

from-image: если изображение имеет ориентацию, указанную в его метаданных, таких как EXIF, это значение вычисляется до угла, указанного в метаданных, необходимого для правильной ориентации изображения. При необходимости этот угол затем округляется и нормализуется, как описано выше для значения. Если в его метаданных не указана ориентация, это значение вычисляется как «0deg».

Соответствующая проблема Chrome: https://bugs.chromium.org/p/chromium/issues/detail?id=158753

Но поддержки браузера пока нет: https://developer.mozilla.org/en/docs/Web/CSS/image-orientation#Browser_compatibility

Поворот через JS

Для этого есть фрагмент JS: https://gist.github.com/runeb/c11f864cd7ead969a5f0

Мой вывод

Я думаю, что вращение изображения на сервере с помощью таких инструментов, как imagemagick, слишком накладно.

Браузер может повернуть изображение, но веб-приложение должно явным образом дать совет, как повернуть это.

Это явное вращение браузера можно сделать следующим образом:

person guettli    schedule 13.04.2016
comment
Что поразительно, если вы просматриваете прямой URL, указывающий на сам JPEG, то все браузеры отображают его правильно. Затем вы помещаете изображение на фон элемента и бум! Ни с того ни с сего он перевернут или боком. Даже Firefox правильно понимает только один из этих случаев (img, но не фон): .org/oria/image-orientation/index.html - person Csaba Toth; 04.12.2018

Начиная с Chrome 81, ориентация EXIF ​​изображения соблюдается по умолчанию. Последний Safari (13.1 на данный момент) также работает правильно.

Firefox не полностью реализовал это (см. Bugzilla issue #1616169).

Вот пара тестовых страниц, которые я нашел:


Что касается стандарта, свойство image-orientation теперь помечено как устаревшее в последней версии Черновик спецификации изображений CSS уровня 3:

'image-orientation'
Это свойство устарело и является необязательным для реализации.

person MrFusion    schedule 13.04.2020
comment
Интересно, что курят разработчики Chromium? Как они могут включить такую ​​штуку по умолчанию. У нас внезапно возникли всевозможные проблемы с нашим сайтом, когда изображения вращались повсюду. - person Johncl; 23.06.2020

Начиная с последнего обновления хрома/хрома версии 81, он будет поддерживать ориентацию exif из самого изображения. Это означает, что ориентация exif, присутствующая в изображении, будет использоваться для ориентации изображения, если не присутствует свойство CSS «image-orientation: none».

До этого обновления вы могли использовать любой другой обходной путь для поворота изображений или поворота вручную на основе известной ориентации изображения. Тогда новый хром 81 автоматически повернет изображение. Если вам нужно избежать автоматического поворота и продолжить работу с тем же обходным путем, что и для старых версий Chrome, вам может потребоваться установить image-orientation: none, так как теперь значение image-orientation равно from-image по умолчанию.

поддержка ориентации изображения в Chrome 81

person Pranav K    schedule 16.04.2020

Я написал небольшой php-скрипт, который вращает изображение. Обязательно сохраните изображение, чтобы просто пересчитывать его при каждом запросе.

<?php

header("Content-type: image/jpeg");
$img = 'IMG URL';

$exif = @exif_read_data($img,0,true);
$orientation = @$exif['IFD0']['Orientation'];
if($orientation == 7 || $orientation == 8) {
    $degrees = 90;
} elseif($orientation == 5 || $orientation == 6) {
    $degrees = 270;
} elseif($orientation == 3 || $orientation == 4) {
    $degrees = 180;
} else {
    $degrees = 0;
}
$rotate = imagerotate(imagecreatefromjpeg($img), $degrees, 0);
imagejpeg($rotate);
imagedestroy($rotate);

?>

Ваше здоровье

person Thom    schedule 17.03.2018

Как было сказано в предыдущем плакате, вам нужно будет повернуть само изображение. Но помимо этого вы также можете установить/сбросить тег поворота в EXIF. Таким образом, вы избежите того, что зрители, которые уважают тег ориентации, снова повернут его. Инструмент, который может редактировать EXIF ​​за вас, называется ExifTool и является бесплатным.

person Jeroen Kransen    schedule 29.09.2012

Инструмент exifautotran можно использовать заранее, чтобы быстро заменить ориентацию EXIF ​​на ориентацию по умолчанию (1, для «верхнего левого») и автоматически повернуть изображение, чтобы оно выглядело так же, как до преобразования. Затем вы можете использовать файлы JPG, полученные таким образом, на веб-странице, не беспокоясь об этом:

a@b:~/a/b/100_PANA$ exifautotran *.JPG
Executing: jpegtran -copy all -rotate 90 P1000638.JPG
Executing: jpegtran -copy all -rotate 270 P1000641.JPG
Executing: jpegtran -copy all -rotate 90 P1000642.JPG
Executing: jpegtran -copy all -rotate 90 P1000645.JPG
…
person Alice M.    schedule 17.02.2018
comment
Другое решение cli: ImageMagick magick mogrify -auto-orient imagefile.jpg - person masterxilo; 06.11.2019

Используйте https://github.com/blueimp/JavaScript-Load-Image.

Он включает демонстрационный файл index.html, который может загружать изображение и правильно отображать его с применением правильного поворота.

person masterxilo    schedule 06.11.2019