#image-processing #imagemagick
#обработка изображений #imagemagick
Вопрос:
Я пытаюсь найти хороший способ добавить белую обводку размером 3 пикселя к тонне файлов 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
в:
выход:
в идеале:
Ответ №1:
Ваша главная проблема заключается в том, что у вас недостаточно места между вашим объектом и сторонами изображения. Вам просто нужно добавить изображение с прозрачностью, а затем удалить излишки позже.
В ImageMagick 6 это должно делать то, что вы хотите.
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
Для ImageMagick 7 замените convert на magick.
Если в системе, подобной Unix, вас может заинтересовать мой скрипт bash ImageMagick, contour, вhttp://www.fmwconcepts.com/imagemagick/index.php
Лучшего результата можно добиться, заменив алмаз:10 на диск:10
Комментарии:
1. Это чертовски близко. На самом деле я использовал это и просто изменил морфологию с ромба: 10 на восьмиугольник: 4, и это выглядит немного лучше (вы можете видеть, что в вашем левом нижнем углу выглядит немного странно).
2. Не стесняйтесь изменять это по желанию. Обратите внимание на мою правку в верхней части моего ответа. Я изменил свой ответ, чтобы показать то же самое, но используя disk: 10, а не diamond: 10
3. почему эта команда создает черную тень, может есть способ скрыть черную тень?
4. Какая черная тень?