Попытка добавить обводку вокруг PNG, можно ли ее улучшить?

#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
  

в: в.png

выход: выход.png

в идеале: в идеале.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. Какая черная тень?