Использование стеков в ImageMagick для выборочного размытия части изображения
-
22-08-2019 - |
Вопрос
Я пытаюсь прокомментировать некоторый текст на базовом изображении с помощью выпадающей тени.Мне не нравятся результаты, которые я получаю от использования опции -shadow, поэтому я добавляю текст, размываю его, затем снова добавляю текст белым цветом, смещенный на несколько пикселей от тени.Вот команда, которую я использую:
convert base_image.jpg \
-font TT0590M_.ttf \
-fill gray30 \
-annotate +0+0 '' -gravity North \
-annotate +72+32 'ABCDEFGHIJKLM' \
-blur 0x4 \
-fill white \
-annotate +72+27 'ABCDEFGHIJKLM' \
combined.png
Моя проблема в том, что опция -blur размывает не только первый слой текста, но и лежащее в его основе базовое изображение.Я хочу, чтобы размылся только первый слой текста, а не базовое изображение.
Я немного почитал об использовании стеков и попытался выделить первый слой текста и команду размытия, используя \( \)
вокруг этой части, например, в следующем:
convert base_image.jpg \
-font TT0590M_.ttf \
-fill gray30 \
-annotate +0+0 '' -gravity North \
\( -annotate +72+32 'ABCDEFGHIJKLM' \
-blur 0x4 \) \
-fill white \
-annotate +72+27 'ABCDEFGHIJKLM' \
combined.png
Результаты те же - и текстовая тень, и лежащее в ее основе базовое изображение становятся размытыми.Боюсь, мне не очень повезло с пониманием стеков или того, какие другие команды я должен использовать, чтобы получить желаемый эффект.
Решение
Как это часто бывает, я продолжал ломать голову над этим с момента публикации вопроса, и мне удалось решить его самостоятельно.
Важным изменением является то, что я начал с чистого прозрачного холста вместо того, чтобы начинать с базового изображения.После того, как я правильно наберу текст, я вставляю базовое изображение в стек, меняю порядок двух изображений в стеке, а затем объединяю их с помощью типа compose "экран", который накладывает одно поверх другого.
Еще одно важное замечание:RGBA -channel необходим для того, чтобы размытие работало в сочетании с прозрачностью текстового слоя из-за особенности работы обмена мгновенными сообщениями.Объясняется, почему это необходимо на этой странице.
Кроме того, в системах Windows (файл .bat вместо сценария оболочки) одинарные кавычки должны быть двойными, а обратная косая черта "\" должна быть кареткой "^", иначе все рухнет.
Приведенный ниже сценарий является окончательным рабочим результатом (* версия nix).:
convert \
-size 500x500 xc:transparent \
-font TT0590M_.ttf \
-annotate +0+0 '' -gravity North \
-fill gray30 \
-annotate +75+35 'ABCDEFGHIJKLMNOPQR\nABCDEFGHIJKLMNOPQR' \
-channel RGBA \
-blur 0x4 \
-fill white \
-annotate +72+30 'ABCDEFGHIJKLMNOPQR\nABCDEFGHIJKLMNOPQR' \
-insert 0 base_image.jpg \
-swap 0,1 \
-composite -compose screen \
combined.png