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

31

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

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

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

Питер Смит
источник

Ответы:

37

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

user7963
источник
1
exiftran, похоже, это именно то , что мне нужно!
Питер Смит
3
jhead -autorot вызывает jpegtran, который может выполнять вращение без потерь. Я забыл все о вещах без потерь от IJG. jpegclub.org/losslessapps.html Exiftran также может выполнять вращение без потерь, и это лучше, чем jpegtran, поскольку он учитывает информацию exif в файле изображения. Однако вы должны заметить, что иногда (и я не уверен во всех деталях) вы не можете вращаться без потерь. Поэтому, если вы реализуете скрипт с jhead для определения необходимого поворота (аналогично моему предыдущему, но с оператором case для обработки всех поворотов), вы должны поддержать возврат к повороту с потерями.
opello
1
Я провел несколько тестов с 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
Я имел в виду неизмененные * пиксели (это были пиксельно-идентичные изображения). Кроме того - я не уверен в протоколе stackoverflow / superuser, но я думаю, что dmityugov должен получить этот для рекомендации надлежащего инструмента.
opello
1
Я обнаружил, что exiftran может удалить некоторые метаданные из файла. Например, изображения, сделанные Samsung Galaxy S2, имеют поле метки времени (возможно, не EXIF), и exiftran удалит его. exiftran -a также изменит изображение, которое не нуждается в повороте. jhead -autorot свободен от обеих проблем. OTOH, ему не хватает опции для сохранения файла mtime (но в качестве обходного пути есть ключ -ft).
pfalcon
12

Инструмент преобразования 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) или что вам нужно.

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

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

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

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

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

swatkat
источник
1

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

mogrify -auto-orient *.jpg
Энди Джи
источник