Как нарисовать качественный штрих изображения (границу) с помощью Imagemagick или PIL?

Я попытался нарисовать обводку изображения (границу) на моем изображении png. originalph_res
(*ожидаемый результат стиля обводки 19px от Photoshop)

и я нашел полезный скрипт на форуме imagemagick. (обсуждение imagemagick)

convert source.png -background '#2a7940' -alpha background -channel A -blur 9x11 stroked.png

но моя лучшая попытка далека от результата Photoshop. im_res

Я перепробовал много комбинаций Radius*Sigma, но мне кажется, что лучший результат получается при использовании трюка с размытием. штрих от Imagemagick или PIL или других инструментов CLI?
* Если да, то как..?
Большое спасибо за то, что прочитали этот вопрос.


person sngjuk    schedule 03.06.2019    source источник
comment
Ваша команда convert source.png -background '#2a7940' -alpha background -channel A -blur 9x11 stroked.png не воспроизводит изображение, которое вы показываете!   -  person fmw42    schedule 03.06.2019
comment
@ fmw42 Спасибо, что сообщили мне! Я использовал 7.0.8-47, и теперь я знаю, что у него есть проблема с размытием, спасибо!   -  person sngjuk    schedule 04.06.2019
comment
@sngjuk. В Imagemagick 7 при размытии альфа-канал будет размыт, если вы не добавите -channel rgb перед -blur, а затем +channel после этого.   -  person fmw42    schedule 04.06.2019
comment
Связано: stackoverflow.com/questions /33888028/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.01.2021


Ответы (3)


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

convert bomb-source.png -write mpr:in -resize 200% \
   -channel A -morphology dilate disk:38 +channel \
   -fill green -colorize 100 -resize 50% mpr:in -composite result.png

Эта команда начинается с чтения входного изображения и сохранения его копии в регистре памяти с именем mpr:in.

Затем он изменяет размер ввода до 200% и использует -morphology для расширения формы примерно на 38 пикселей. Это сработает примерно до 19 пикселей после того, как изображение будет уменьшено до исходного размера.

Затем он раскрашивает эту новую фигуру, чтобы сделать ее зеленой, и изменяет ее размер на 50%, то есть возвращается к исходному размеру.

Команда завершается тем, что возвращает эту mpr:in копию исходного изображения и компонует ее поверх измененного зеленого фрагмента.

Увеличение размера, работа над этим и уменьшение его после изменения называется суперсэмплингом. Это распространенная техника, которая приводит к более гладким краям, но достигается за счет скорости.

Отредактировано для добавления выходного изображения... введите здесь описание изображения

person GeeMack    schedule 03.06.2019
comment
Это однозначно лучшее качество!! Спасибо за полезную технику (+регистрация использования) еще раз спасибо! - person sngjuk; 04.06.2019

Это может помочь вам начать:

convert bomb-source.png \
  \( +clone -alpha extract -morphology edge-out disk:19 -fill green -opaque white \) \
  -compose lighten -composite -transparent black result.png

введите здесь описание изображения

-transparent black в конце не является оптимальным, если ваше центральное изображение содержит черный цвет, поэтому я еще подумаю об этом...

Если вы добавите -write stroke.png после слова disk:19, вы получите новый файл с именем stroke.png, который показывает, что делает морфология.

person Mark Setchell    schedule 03.06.2019
comment
Не спешите принимать этот ответ - я думаю, у пары людей будут идеи получше :-) - person Mark Setchell; 03.06.2019

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

Вход:

введите здесь описание изображения

Line1 - read input
Line2 - clone it and make it fully opaque green
Line3 - clone the input, extract the alpha channel, dilate it to 19 or 20, then blur by 0x1 to antialias and use -level to remove the inner side of the blur
Line4 - put the dilated alpha into the alpha channel of the green image
Line5 - remove the temporary clones, swap the remaining two images and overlay the original over the green
Line6 - write the output

convert bomb-source.png \
\( -clone 0 -alpha off -fill green -colorize 100 \) \
\( -clone 0 -alpha extract -morphology dilate disk:20 -blur 0x1 -level 50x100% \) \
\( -clone 1,2 -compose copy_opacity -composite \) \
-delete 1,2 +swap -compose over -composite \
result.png

введите здесь описание изображения

Если вам нужно больше сглаживания, увеличьте размытие до 0x2.

Для ImageMagick 7 замените convert на magick.

person fmw42    schedule 03.06.2019
comment
Это лучшее качество с разумным временем обработки! спасибо большое с другой стороны земли!! - person sngjuk; 04.06.2019