Правильный порядок указания параметров командной строки ImageMagick

В комментариях к одному из моих недавних вопросов по ImageMagick Фред Вайнхаус отметил:

Обратите внимание, что -quality — это настройка для записи, а не настройка для -rotate, поскольку она идет после -rotate и перед выводом. (Это могло произойти раньше -rotate только потому, что ImageMagick в некоторой степени прощает синтаксические ошибки.)

Источник: ImageMagick: Цель использования «-качества»

Есть ли ссылка (раздел на веб-сайте ImageMagick, статья или что-то подобное), которая описывает/объясняет порядок, в котором следует указывать параметры командной строки ImageMagick? Я имею в виду не порядок, который «просто работает» (путем прощения ошибок, как указал выше Фред), а порядок, который действительно будет иметь смысл, правильный.

Я не думаю, что это правильно. Параметр -quality не влияет на поворот, он влияет только на JPEG и, в отличие от ожидаемого, на кодировку PNG. Вы можете попробовать с magick SomeImage -quality 1 -rotate 45 -quality 85 result.jpg, и -quality 1 не имеет никакого значения, я вижу ротацию.

Mark Setchell 11.06.2024 13:00

Возможно, вы думали о ffmpeg, где положение параметров является значимым, т. е. те, что были до -i, применяются к входам, тогда как следующие -i применяются к выходам.

Mark Setchell 11.06.2024 13:09

@MarkSetchell Привет, Марк. «Я не думаю, что это правильно. Настройка -quality не влияет на вращение, она влияет только на [запись] в JPEG» — Обратите внимание, что я добавил «запись» к вашим словам, чтобы показать, как я их понял. Я не понимаю, как ваши слова в таком случае противоречат тому, что сказал Фред. Кажется, он сказал то же самое, но я, возможно, здесь ошибаюсь, конечно. Кроме того, в вашем примере есть два варианта -quality, это намеренно, а не опечатка?

user25418595 11.06.2024 13:09

IIUC, о чем вы спрашиваете... ImageMagick имеет настройки, которые не имеют немедленного эффекта, но остаются в силе до тех пор, пока не будут изменены и не влияют на все последующие операции, а также есть операторы, которые немедленно вызывают некоторую обработку всех загруженных в данный момент изображений. Итак, -rotate — это оператор, потому что он немедленно поворачивает все загруженные изображения, тогда как -quality — это параметр, который ничего не делает, пока не произойдет запись, а затем влияет на кодировщик.

Mark Setchell 11.06.2024 13:13

О, это полезно знать, спасибо. Я не знал об этой разнице, и это имеет смысл. Кстати, я предоставил ссылку на нашу дискуссию с Фредом выше.

user25418595 11.06.2024 13:15

У меня есть две настройки -quality, чтобы продемонстрировать, что установка смехотворно низкого качества перед поворотом не влияет на поворот (противоречит утверждению, что качество влияет на поворот), и что только второй -quality имеет какое-либо влияние на сохранение JPEG.

Mark Setchell 11.06.2024 13:16

@MarkSetchell Кажется, теперь я тебя понимаю. И кажется, все станет ясно, если немного изменить слова Фреда: «Обратите внимание, что -quality — это настройка для записи, а не настройка для -rotate, и так должно быть после -rotate и перед выводом». Возможно, он именно это и имел в виду, но, конечно, это всего лишь предположение. А если так, то, кажется, между вами и ним нет противоречия.

user25418595 11.06.2024 13:21

См. imagemagick.org/Usage/basics/#cmdline

fmw42 11.06.2024 22:19
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В документах есть раздел под названием «Анатомия командной строки», который показывает мощь и доступную сложность командной строки ImageMagick. Это здесь.

Читайте до тех пор, пока не найдете оператор изображения и настройку изображения для хорошего объяснения. По сути, операторы делают что-то немедленно с любыми загруженными в данный момент изображениями (не затрагивая любые впоследствии загруженные/созданные изображения), тогда как настройки не вызывают каких-либо немедленных изменений/обработки любых изображений, но сохраняют некоторые настройки/характеристики/значения до тех пор, пока они не понадобятся позже - и остаются действует до тех пор, пока не будет изменено.


Так, например, -rotate — это оператор, поэтому следующая команда загрузит два изображения и немедленно повернёт их оба:

magick image1.jpg image2.jpg -rotate 45 ...

Принимая во внимание, что -quality — это настройка, поэтому следующие два изображения будут загружать одни и те же два изображения и поворачивать их, и вы можете установить качество в любой момент перед выходным файлом, и это повлияет только на качество выходного файла, а не на поворот. Все следующее идентично:

magick -quality 3 image1.jpg image2.jpg -rotate 45 result%d.jpg
magick image1.jpg -quality 3 image2.jpg -rotate 45 result%d.jpg
magick image1.jpg image2.jpg -quality 3 -rotate 45 result%d.jpg
magick image1.jpg image2.jpg -rotate 45 -quality 3 result%d.jpg

Другой пример: -size — это настройка, поэтому она остается в силе до тех пор, пока не будет изменена, в результате чего синий блок будет иметь тот же размер, что и красный:

magick -size 32x32 xc:red xc:blue -size 100x32 xc:lime +append result.png

Но -rotate — это оператор, поэтому вращение первых двух блоков происходит немедленно, но не влияет на лимонно-зеленый блок, который создается впоследствии:

magick -size 32x32 xc:red xc:blue -rotate 45 -size 100x32 xc:lime +append result.png

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