Search code examples
imagemagickimagemagick-convert

How to draw a image on top of a shape


Simplified example:

I do create a cirlce like following:

magick convert -size 256x256 xc:none -fill #FFFFFF -draw "circle 128,128 256,128" +profile "icc" out.png

And I do convert a given image like following:

magick convert in.png -background none -gravity center -resize 181x181 +profile "icc" out.png

Question:

In my examples above I do have following "core" functions:

  • -size 256x256 xc:none -fill #FFFFFF -draw "circle 128,128 256,128" +profile "icc"
  • in.png -background none -gravity center -extent 181x181 +profile "icc"

How can I combine those images WITHOUT saving the first one to a temporary file? I want to create a 256x256 output image, draw the circle to this image and then draw the converted input image on top of the circle (centered).

My current solution

Create 2 different images and combine them like following:

 magick convert -composite -gravity Center out1.png out2.png out.png

EDIT - FULL EXAMPLE

PS Script looks like following:

$in = ".\in.png"
$out1 = ".\tmp1.png"
$out2 = ".\tmp2.png"
$out = ".\out.png"

// 1) create circle image
magick convert -size 256x256 xc:none -fill #FFFFFF -draw "circle 128,128 256,128" +profile "icc" PNG32:$out1

// 2) convert input image
magick convert $in -background none -gravity center -resize 181x181 +profile "icc" -colorspace Gray -fill "#E91FCB" -colorize 50 PNG32:$out2

// 3) combine circle + converted image
magick convert -composite -gravity Center $out1 $out2 PNG32:$out

// 4) delete temp. images
Remove-Item $out1
Remove-Item $out2

Input Image:

enter image description here

Output Image (not visible, but it has the white circle as background + a transparent background otherwise):

enter image description here


Solution

  • You can use parenthesised processing like this:

    magick -size 256x256 xc:none -fill white -draw "circle 128,128 256,128" \( in.png -background none -gravity center -resize 181x181 -colorspace Gray -fill "#E91FCB" -colorize 50 \) -composite result.png
    

    enter image description here

    On Windows, omit the \ before parentheses.