Я уже некоторое время работаю над сценарием (не скажу, как долго ?), который простыми словами предназначен для выполнения того, что описано выше. Может быть полезно отметить, что этот сценарий выполняется в экземпляре узла, поскольку он в конечном итоге используется в сценарии развертывания через GH Actions.
Мое текущее предположение состоит в том, что часть операции IM не зависит от среды в котором он запускается, но я знаю, что могу ошибаться в этом ... Я слышал об imagemagick только когда начал работать над этим проектом, поэтому я начинаю понимать некоторые вещи, но подавляющее большинство из них является загадкой.
версия imagemagick
Version: ImageMagick 7.0.10-13 Q16 x86_64 2020-05-17 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(3.1)
Delegates (built-in): bzlib freetype gslib heic jng jp2 jpeg lcms ltdl lzma openexr png ps tiff webp xml zlib
Это моя текущая итерация:
Единственные элементы, которые меняются при запуске: производный размер , которые я собираю из исходное изображение и переход к следующему процессу и storedGravity , который исходит от объекта json и привязан как данные к исходному изображению. Параметр производный размер должен был решить проблему с меткой, установленной по умолчанию и выходящей на разной высоте.
convert -background none -fill white -density 90 \
-size x250 -font "Helvetica-Bold" \
label:Hello \( +clone -background black -shadow 90x3+10+10 \) \
+swap -background none -layers merge \
\( beautiful_grass_psd.psd -flatten -strip \) \
+swap -gravity SouthWest -geometry +30+30 -composite +repage \
\( -clone 0 -resize 240 -write newfile@1.jpg \) \
\( -clone 0 -resize 480 -write newfile@2.jpg \) \
\( -clone 0 -resize 960 -write newfile@4.jpg \) null:
Ограничения
- Этикетка должна располагаться в обозначенном углу под действием силы тяжести, с отступом от угла на одинаковое количество изображений
- Этикетка должна быть с резкими краями и немного выступать из кадра, в настоящее время это достигается с помощью тени, это необходимо для сохранять читаемость и следить за тем, чтобы, например, белые буквы не переходили в похожий цвет в кадре изображения
- Размер шрифта должен колебаться в районе 14-18 пикселей при ширине 240, в точках идеальный вид кажется где-то около 16pt
Проблемы, с которыми я сталкиваюсь:
- Похоже, этикетка имеет небольшую размытость, от которой я не могу избавиться. Это, может быть, в основном связано с преобразованием в JPEG? Не уверен
- Кажется, что позиция смещается в зависимости от изображения, что немного сбивает с толку, может быть, я ошибаюсь в геометрии?
То, что я пробовал по проблеме
- настроить тень - это, кажется, немного помогает, но имеет жесткие ограничения, а также кажется наиболее эффективным при увеличении размера шрифта и Я хотел бы попытаться сохранить относительный размер шрифта около
- удалить модификаторы качества при записи - это, похоже, немного улучшит ситуацию, что ожидается ... ?
- удалите действие mpr: image и запишите каждое изображение индивидуально - это не очень хорошо, потому что для этого требуется просто кучу дополнительных узловых процессов, мне вроде как понравилось, что вы могли передать изображение таким образом , но, возможно, есть лучший способ сохранить точность воспроизведения 2.
- в основном просто возиться с настройками геометрии
Ссылки на ресурсы
- https://imagemagick.org/Usage/text/
- https://imagemagick.org/discourse-server/viewtopic.php?t=25073 - что заставляет меня думать, что, возможно, мне не нужен mpr
- http://www.imagemagick.org/discourse-server/viewtopic.php?t=35202
Возможная альтернатива пути
- Аннотировать? - обеспечивает ли это лучшую точность воспроизведения?
- возможно, основная проблема заключается в простом формате с потерями в конце строки?
EDIT - добавлена новейшая итерация скрипта, а также IM версия