Как автоматически поворачивать изображения, основываясь на данных exif

27637
Peter Smit

Когда я делаю снимки с помощью моей камеры (Olympus E-520), в данных EXIF ​​сохраняется ориентация.

Стандартный просмотрщик изображений в Ubuntu правильно отображает эти изображения. Средство просмотра Windows, однако, нет.

Есть ли способ действительно повернуть эти изображения (при необходимости в соответствии с EXIF) в пакете на Ubuntu? Например, с помощью инструмента ImageMagick?

29

4 ответа на вопрос

35
user7963

exiftranи JHead ( jhead -autorot) может сделать это. exiftranможет сделать это без потерь, не уверен в этом jhead.

exiftran выглядит, как будто это * именно * то, что мне нужно! Peter Smit 14 лет назад 1
jhead -autorot вызывает jpegtran, который может выполнять вращение без потерь. Я забыл все о вещах без потерь от IJG. http://jpegclub.org/losslessapps.html Exiftran также может выполнять вращение без потерь, и это лучше, чем jpegtran, поскольку он учитывает информацию exif в файле изображения. Однако вы должны заметить, что иногда (и я не уверен во всех деталях) вы не можете вращаться без потерь. Поэтому, если вы реализуете скрипт с jhead для определения необходимого поворота (аналогично моему предыдущему, но с оператором case для обработки всех поворотов), вы должны поддержать возврат к повороту с потерями. opello 14 лет назад 3
Я провел несколько тестов с exiftran -a (автоповорот на основе тега ориентации exif), и он, кажется, работает очень хорошо. Что касается вращения без потерь, я не мог вернуть исходное изображение, выполнив инверсию выполненного вращения. Например, exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum из 1.jpg и 3.jpg - это не одно и то же. При ближайшем рассмотрении (с помощью двоичного сравнения слиянием по Araxis) иногда это была просто информация заголовка exif, которая отличалась, в других случаях это были значительные изменения в файле. Однако сравнение изображений слияния Araxis не показало неизменных пикселей. opello 14 лет назад 1
Я имел в виду неизмененные * пиксели (это были пиксельно-идентичные изображения). Кроме того - я не уверен в протоколе stackoverflow / superuser, но я думаю, что dmityugov должен получить этот для рекомендации надлежащего инструмента. opello 14 лет назад 0
Я обнаружил, что exiftran может удалить некоторые метаданные из файла. Например, изображения, сделанные Samsung Galaxy S2, имеют поле метки времени (возможно, не EXIF), и exiftran удалит его. exiftran -a также изменит изображение, которое не нуждается в повороте. jhead -autorot свободен от обеих проблем. OTOH, ему не хватает опции для сохранения файла mtime (но есть обходной ключ -ft как обходной путь). pfalcon 10 лет назад 1
У меня работает: `ls * .JPG | xargs -I {} exiftran -i -a {} ` mrgloom 6 лет назад 0
12
opello

Инструмент преобразования ImageMagick имеет флаг -auto-orient, который должен выполнить работу.

#!/bin/bash  JHEAD=jhead SED=sed CONVERT=convert  for f in *.jpg do orientation=$($JHEAD -v $f | $SED -nr 's:.*Orientation = ([0-9]+).*:\1:p')  if [ -z $orientation ] then orientation=0 fi  if [ $orientation -gt 1 ] then echo Rotating $f... mv $f $f.bak $CONVERT -auto-orient $f.bak $f fi done 

Я собрал быстрый скрипт для перебора * .jpg в текущем каталоге. Вы можете легко изменить это, чтобы получить путь ($ 1) или все, что вам нужно.

Большой! Тот, который я не нашел. Я использую это с mogrify, чтобы сделать пакет изображений. Только один вопрос, почему он переписывает все изображения, даже если они не должны меняться? (Хэши различаются) Peter Smit 14 лет назад 1
Я не уверен, * почему *, но, похоже, он выполняет полное перекодирование, просматривая как различие в изображении, так и двоичное различие. opello 14 лет назад 0
Вау, это здорово. Спасибо большое. Если не будет добавлено никаких других хороших ответов, я обязательно приму этот. Peter Smit 14 лет назад 0
2
swatkat

Вы можете использовать XnView, чтобы сделать это. Посмотрите на этих страницах информацию об использовании XnView для автоматического поворота в пакетном режиме:

В Windows вы можете сделать это с помощью IrfanView . Из раздела FAQ сайта IrfanView:

В: Как использовать JPG без потерь (Поворот, IPTC, Комментарий) в пакетном режиме?

A: Запустите окно миниатюр, откройте папку с JPG, выберите множество JPG и посмотрите в меню миниатюр Файл для JPG Операции без потерь -> Преобразования без потерь с выбранными большими пальцами. Примечание. Параметр автоматического поворота работает только в том случае, если тег ориентации EXIF ​​сохранен правильно (не слева вверху).

1
Andy Gee

С помощью ImageMagick вы также можете использовать mogrify для поворота файлов и записи повернутого изображения обратно в исходные имена файлов.

mogrify -auto-orient *.jpg 

Похожие вопросы