В комментариях к одному из моих недавних вопросов по ImageMagick Фред Вайнхаус отметил:
Обратите внимание, что
-quality— это настройка для записи, а не настройка для-rotate, поскольку она идет после-rotateи перед выводом. (Это могло произойти раньше-rotateтолько потому, что ImageMagick в некоторой степени прощает синтаксические ошибки.)
Есть ли ссылка (раздел на веб-сайте ImageMagick, статья или что-то подобное), которая описывает/объясняет порядок, в котором следует указывать параметры командной строки ImageMagick? Я имею в виду не порядок, который «просто работает» (путем прощения ошибок, как указал выше Фред), а порядок, который действительно будет иметь смысл, правильный.
Возможно, вы думали о ffmpeg, где положение параметров является значимым, т. е. те, что были до -i, применяются к входам, тогда как следующие -i применяются к выходам.
@MarkSetchell Привет, Марк. «Я не думаю, что это правильно. Настройка -quality не влияет на вращение, она влияет только на [запись] в JPEG» — Обратите внимание, что я добавил «запись» к вашим словам, чтобы показать, как я их понял. Я не понимаю, как ваши слова в таком случае противоречат тому, что сказал Фред. Кажется, он сказал то же самое, но я, возможно, здесь ошибаюсь, конечно. Кроме того, в вашем примере есть два варианта -quality, это намеренно, а не опечатка?
IIUC, о чем вы спрашиваете... ImageMagick имеет настройки, которые не имеют немедленного эффекта, но остаются в силе до тех пор, пока не будут изменены и не влияют на все последующие операции, а также есть операторы, которые немедленно вызывают некоторую обработку всех загруженных в данный момент изображений. Итак, -rotate — это оператор, потому что он немедленно поворачивает все загруженные изображения, тогда как -quality — это параметр, который ничего не делает, пока не произойдет запись, а затем влияет на кодировщик.
О, это полезно знать, спасибо. Я не знал об этой разнице, и это имеет смысл. Кстати, я предоставил ссылку на нашу дискуссию с Фредом выше.
У меня есть две настройки -quality, чтобы продемонстрировать, что установка смехотворно низкого качества перед поворотом не влияет на поворот (противоречит утверждению, что качество влияет на поворот), и что только второй -quality имеет какое-либо влияние на сохранение JPEG.
@MarkSetchell Кажется, теперь я тебя понимаю. И кажется, все станет ясно, если немного изменить слова Фреда: «Обратите внимание, что -quality — это настройка для записи, а не настройка для -rotate, и так должно быть после -rotate и перед выводом». Возможно, он именно это и имел в виду, но, конечно, это всего лишь предположение. А если так, то, кажется, между вами и ним нет противоречия.
См. imagemagick.org/Usage/basics/#cmdline





В документах есть раздел под названием «Анатомия командной строки», который показывает мощь и доступную сложность командной строки 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
Я не думаю, что это правильно. Параметр
-qualityне влияет на поворот, он влияет только на JPEG и, в отличие от ожидаемого, на кодировку PNG. Вы можете попробовать сmagick SomeImage -quality 1 -rotate 45 -quality 85 result.jpg, и-quality 1не имеет никакого значения, я вижу ротацию.