Пытаясь добавить обводку вокруг PNG, можно ли ее улучшить? - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь найти хороший способ добавить 3px белый штрих к тонне png-файлов, чтобы они выглядели как "наклейки".У меня есть некоторый пример кода, который делает достойную работу, но я не могу, кажется, правильно обрезатьКроме того, штрих выглядит немного пиксельным, и я хотел знать, возможно ли получить более четкие края!

Я провёл кучу интернет-поисков, нашел пример кода, подправил его и пришел к тому, что почтинапоминает то, что я ищу.Изображения всегда будут PNG, поэтому я посмотрел на такие вещи, как inkscape / gimp из командной строки, но понял, что смогу сделать это, просто используя convert из терминала.

convert in.png \
\( -clone 0 -alpha extract -threshold 0 \) \
\( -clone 1 -blur 10x65000 -threshold 0 \) \
\( -clone 2 -fill red -opaque white \) \
\( -clone 3 -clone 0 -clone 1 -alpha off -compose over -composite \) \
-delete 0,1,3 +swap -alpha off -compose copy_opacity -composite \
out.png

в: in.png

out: out.png

в идеале: ideally.png

1 Ответ

2 голосов
/ 08 апреля 2019

Ваша главная проблема в том, что у вас недостаточно места между вашим объектом и сторонами изображения.Вам просто нужно добавить изображение с прозрачностью, а затем удалить излишки.

В ImageMagick 6 это должно делать то, что вы хотите.

enter image description here

1) read the input
2) add a larger border than you need to add
3) extract the alpha channel from the input and dilate it by the amount of border (in this case 10)
4) copy the previous image and color the white as red and the black as transparent
5) composite the original over the red/transparent image
6) delete the original and the red/transparent image
7) swap the composite with the dilated alpha channel and put the dilated alpha channel into the alpha channel of the previous image
8) trim the excess transparency from the border padding
9) save to output

convert img.png \
-bordercolor none -border 20 \
\( -clone 0 -alpha extract -morphology dilate diamond:10 \) \
\( -clone 1 -fuzz 30% -fill red -opaque white -fill none -opaque black \) \
\( -clone 2,0 -compose over -composite \) \
-delete 0,2 \
+swap -alpha off -compose copy_opacity -composite \
-trim +repage \
result.png


enter image description here

Для ImageMagick 7 замените конвертацию магией.

Если в Unix-подобной системе вы можетеменя заинтересовал скрипт bash ImageMagick, контур, на http://www.fmwconcepts.com/imagemagick/index.php

Лучшего результата можно достичь, заменив алмаз: 10 на диск: 10

enter image description here

...