Как указать и прочитать ориентацию изображения

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, только если на изображении установлен флаг ориентации. Я не думаю, что вы сможете сделать первый шаг в Imagemagick. Вы можете выполнить только шаг 3. Если у вас правильно установлена ​​ориентация в поле ориентации в заголовке изображения (см. «Идентифицировать -verbose») или вы используете команду из шага II, она сообщит что-то о том, какой угол находится в пикселе 0,0. Например, нормальная ориентация будет означать «верхний левый». Я думаю, вы можете установить ориентацию камеры с помощью EXIFTOOL.

fmw42 05.06.2024 00:39

ПРОДОЛЖЕНИЕ: При выполнении -auto-orient выполняется поворот в соответствии с флагом ориентации, чтобы исправить вращение, если флаг ориентации установлен в какой-то другой угол, т. е. говорит что-то кроме верхнего левого угла. Другие инструменты, такие как Exiftool, могут указать, на какой угол повернуть или на какой угол камера была повернута неправильно. См. jdhao.github.io/2019/07/31/image_rotation_exif_info/…. Он не устанавливает флаг ориентации. Используйте Exiftool для установки ориентации, только если по какой-то причине она установлена ​​неправильно.

fmw42 05.06.2024 00:43

@ fmw42 «Я не думаю, что вы сможете выполнить первый шаг в ImageMagick». - А разве не для этого предназначена опция -orient? «-orient ориентация изображения: укажите ориентацию изображения цифровой камеры». - imagemagick.org/script/command-line-options.php#orient

user25418595 05.06.2024 09:22

Виноват. Я только что посмотрел, и оно есть. Для меня новость, так как я никогда раньше им не пользовался. Спасибо за исправление.

fmw42 05.06.2024 18:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете установить ориентацию с помощью 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 у меня не работает? И работает ли это у вас?

user25418595 05.06.2024 11:10

Мммм, это странно. Собственно поэтому я и предложил exiftool. Если изображение имеет существующую (предположительно неверную) ориентацию, то предложенная вами команда работает и изменит ориентацию. Однако если ориентация не установлена, она не будет установлена. Извините, я понятия не имею, почему.

Mark Setchell 05.06.2024 11:28

@jsx. Чего вы ожидали от magick 0.jpg -orient top-left 1.jpg. Это не меняет имидж. Он меняет только тег в заголовке. Вы проверили с помощью magick image.jpg -format "%[orientation]" info:, есть ли у ввода и вывода нужные и разные флаги ориентации. Был ли ввод уже ориентирован вверху слева? Если да, то результат не будет отличаться.

fmw42 05.06.2024 18:03

@fmw42 и Марк, я сообщил об этом как об ошибке: github.com/ImageMagick/ImageMagick/issues/7379

user25418595 07.06.2024 10:14

Возможно, добавьте ссылку на этот вопрос в свой отчет об ошибке. Получите ссылку, нажав Share внизу вашего вопроса.

Mark Setchell 07.06.2024 10:31

Я ответил на ваш вопрос. Ошибка отсутствует. Для меня он изменился с неопределенного на верхний левый

fmw42 07.06.2024 17:55

Другие вопросы по теме