[SOLVED] Imagemagick transparent background and white image outlines

Questions and postings pertaining to the usage of ImageMagick regardless of the interface. This includes the command-line utilities, as well as the C and C++ APIs. Usage questions are like "How do I use ImageMagick to create drop shadows?".
User avatar
fmw42
Posts: 26383
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: Imagemagick transparent background and white image outlines

Post by fmw42 »

I think this might be what you want.

Input:
Image

line 1-2: read the input and flood fill to make white into transparent
line3: create an all white image
line4: create a ring of white outside the area of the transparent part of the alpha channel, but save the alpha channel to mpr
line5: composite the input, white and ring image
line6: dilate the alpha channel and blur to antialias
line7: put that image into the alpha channel of the result of line5
line8: write the output

Note I have left in tmp image so you can see the steps. You can remove the +write tmpX.png when satisfied.

Code: Select all

magick \( image.png +repage -bordercolor white -border 1x1 \
-fill transparent -floodfill +0+0 white -shave 1x1 +write tmp0.png \) \
\( -clone 0 -fill white -colorize 100% \) \
\( -clone 0 -alpha extract +write tmp1.png -write mpr:alpha -morphology edgeout octagon:10 +write tmp2.png \) \
-alpha off -compose over -composite +write tmp3.png \
\( mpr:alpha -morphology dilate octagon:10 -blur 0x1 -level 50x100% +write tmp4.png \) \
-alpha off -compose copy_opacity -composite \
result1.png
Image

coloring
Posts: 79
Joined: 2015-08-27T10:17:36-07:00
Authentication code: 1151

Re: Imagemagick transparent background and white image outlines

Post by coloring »

That's exactly my intended result, thank you very much! I will study the steps carefully :)

User avatar
fmw42
Posts: 26383
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: [SOLVED] Imagemagick transparent background and white image outlines

Post by fmw42 »

If on Unix-like system, see my script, contour, at my link below.

coloring
Posts: 79
Joined: 2015-08-27T10:17:36-07:00
Authentication code: 1151

Re: [SOLVED] Imagemagick transparent background and white image outlines

Post by coloring »

Is there a way to create some extra working space and trim it afterwards so that the edgeout and dilation don't get clipped if they go beyond the previous image bounds? (I'm trying to figure out how to do that right now)

User avatar
fmw42
Posts: 26383
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: [SOLVED] Imagemagick transparent background and white image outlines

Post by fmw42 »

Are you asking about my script or about the code above? In either case, can you post an example of the issue with an input and output.

coloring
Posts: 79
Joined: 2015-08-27T10:17:36-07:00
Authentication code: 1151

Re: [SOLVED] Imagemagick transparent background and white image outlines

Post by coloring »

I mean the code above. (Your script is really nice by the way)

This is an example of the edges clipped (not enough room for expansion of edgeout and dilation)
Image

And here I increased the image size a little to account for expansion (unfortunately, I wasn't able to figure out how to trim the result yet)

Code: Select all

magick \( image.png +repage -bordercolor white -border 1x1 \
-fill transparent -floodfill +0+0 white -shave 1x1 \
-bordercolor transparent -border 30x30 +write tmp0.png \) \
Image

---
And lastly, after doing the edgeout and dilation, there are sometimes some gaps inside left over. I figure I can use your previous code somewhere to fill those in. (The number is so high because any and all gaps should be removed)

Code: Select all

-define connected-components:mean-color=true \
-define connected-components:area-threshold=500 \
-connected-components 4 \
Image example. You can see that the morphology has caused there too be a closed gap now.
Image

Thank you for your patience, I really appreciate it. Although I'm new to imagemagick, I'm finding it to be quite fun reading the documentation. I'm learning a lot! This is also turning out quite nicely ;)

User avatar
fmw42
Posts: 26383
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: [SOLVED] Imagemagick transparent background and white image outlines

Post by fmw42 »

Your last image seems to be the same as the second. Using connected-components is what I would have suggested to fill the gaps.

To add more room use -bordercolor and -border with a large enough border to account for the room you need. You can remove that at the end by using -shave with the same value as you used for -border.

coloring
Posts: 79
Joined: 2015-08-27T10:17:36-07:00
Authentication code: 1151

Re: [SOLVED] Imagemagick transparent background and white image outlines

Post by coloring »

Here is my final code. Removes all the gaps inside, and trims the final image. Works great, thank you very much! :)

Edit: gah, actually, trim isn't working! I can't figure it why

Code: Select all

magick \( image.png +repage -bordercolor white -border 1x1 \
-fuzz 10% -fill transparent -floodfill +0+0 white -shave 1x1 \
-bordercolor transparent -border 25x25 \) \
\( -clone 0 -fill white -colorize 100% \) \
\( -clone 0 -alpha extract -write mpr:alpha -morphology edgeout octagon:20 \
-define connected-components:mean-color=true \
-define connected-components:area-threshold=500 \
-connected-components 4 \) \
-alpha off -compose over -composite \
\( mpr:alpha -morphology dilate octagon:20 \
-define connected-components:mean-color=true \
-define connected-components:area-threshold=500 \
-connected-components 4  -blur 2x20 -level 50x100% \) \
-alpha off -compose copy_opacity -composite -trim \
result.png

Locked