I. Я не понимаю, как указать ориентацию изображения.
Шаг 1. Я указываю ориентацию изображения, используя
magick 0.jpg -orient top-left 1.jpg
Шаг 2: Я поворачиваю изображение, используя
magick 1.jpg -rotate 90 2.jpg
Шаг 3: Я пытаюсь восстановить указанную ранее ориентацию, используя
magick 2.jpg -auto-orient 3.jpg
Я ожидал, что 3.jpg повернётся на -90 градусов, и поэтому он будет выглядеть как 0.jpg и 1.jpg, но этого не произошло, и он всё равно будет выглядеть как 2.jpg.
Я делаю что-то неправильно?
II. Также я не понимаю, как узнать указанную ориентацию. Я пытался
magick identify -format "%[orientation]" 3.jpg
но это возвращается Undefined.
ПРОДОЛЖЕНИЕ: При выполнении -auto-orient выполняется поворот в соответствии с флагом ориентации, чтобы исправить вращение, если флаг ориентации установлен в какой-то другой угол, т. е. говорит что-то кроме верхнего левого угла. Другие инструменты, такие как Exiftool, могут указать, на какой угол повернуть или на какой угол камера была повернута неправильно. См. jdhao.github.io/2019/07/31/image_rotation_exif_info/…. Он не устанавливает флаг ориентации. Используйте Exiftool для установки ориентации, только если по какой-то причине она установлена неправильно.
@ fmw42 «Я не думаю, что вы сможете выполнить первый шаг в ImageMagick». - А разве не для этого предназначена опция -orient? «-orient ориентация изображения: укажите ориентацию изображения цифровой камеры». - imagemagick.org/script/command-line-options.php#orient
Виноват. Я только что посмотрел, и оно есть. Для меня новость, так как я никогда раньше им не пользовался. Спасибо за исправление.





Вы можете установить ориентацию с помощью exiftool следующим образом:
exiftool -orientation#=6 image.jpg
Допустимые числовые значения:
1 = Horizontal (normal)
2 = Mirror horizontal
3 = Rotate 180
4 = Mirror vertical
5 = Mirror horizontal and rotate 270 CW
6 = Rotate 90 CW
7 = Mirror horizontal and rotate 90 CW
8 = Rotate 270 CW
Или вы можете использовать словоблудие следующим образом:
exiftool -orientation = "Rotate 90 CW" image.jpg
Если вы хотите получить ориентацию, вы можете получить ее следующим образом:
exiftool -orientation image.jpg
Orientation : Rotate 90 CW
Или численно:
exiftool -orientation# image.jpg
Orientation : 6
Или без украшений, вот так:
exiftool -s3 -orientation# image.jpg
6
Вы также можете получить его с помощью ImageMagick, используя escape-символы:
magick image.jpg -format "%[orientation]" info:
RightTop
Или с помощью ImageMagick, используя парсер JSON, например jq:
magick image.jpg json: | jq -r '.[].image.orientation'
RightTop
Или с помощью ImageMagick и awk:
magick identify -verbose image.jpg | awk '/Orientation/ {print $NF}'
RightTop
Привет, Марк. Большое спасибо, но может быть вы тоже знаете, почему magick 0.jpg -orient top-left 1.jpg у меня не работает? И работает ли это у вас?
Мммм, это странно. Собственно поэтому я и предложил exiftool. Если изображение имеет существующую (предположительно неверную) ориентацию, то предложенная вами команда работает и изменит ориентацию. Однако если ориентация не установлена, она не будет установлена. Извините, я понятия не имею, почему.
@jsx. Чего вы ожидали от magick 0.jpg -orient top-left 1.jpg. Это не меняет имидж. Он меняет только тег в заголовке. Вы проверили с помощью magick image.jpg -format "%[orientation]" info:, есть ли у ввода и вывода нужные и разные флаги ориентации. Был ли ввод уже ориентирован вверху слева? Если да, то результат не будет отличаться.
@fmw42 и Марк, я сообщил об этом как об ошибке: github.com/ImageMagick/ImageMagick/issues/7379
Возможно, добавьте ссылку на этот вопрос в свой отчет об ошибке. Получите ссылку, нажав Share внизу вашего вопроса.
Я ответил на ваш вопрос. Ошибка отсутствует. Для меня он изменился с неопределенного на верхний левый
Насколько я знаю, вы можете исправить ориентацию, используя -auto-orient, только если на изображении установлен флаг ориентации. Я не думаю, что вы сможете сделать первый шаг в Imagemagick. Вы можете выполнить только шаг 3. Если у вас правильно установлена ориентация в поле ориентации в заголовке изображения (см. «Идентифицировать -verbose») или вы используете команду из шага II, она сообщит что-то о том, какой угол находится в пикселе 0,0. Например, нормальная ориентация будет означать «верхний левый». Я думаю, вы можете установить ориентацию камеры с помощью EXIFTOOL.