Using Magick I managed to create a simple rounded rectangle filled with a solid color and having a shadow:
magick montage -background none -size 300x200 xc:none -fill green -draw "roundRectangle 0,0 300,200 8,8" -shadow -geometry +10+10
The result is the following:
Is there an easy way to slighty modify the command in order to have a gradient fill (for instance from green to red) instead of the solid green, mantaining all other aspects (rounded corners and shadow) ?
The ideal result is the following:
Here's a way to do that.
magick start.png \
\( +clone -size "%Hx%W" +delete gradient:green-red -rotate -90 -write MPR:gradient +delete \) \
\( +clone -alpha off -fill black +opaque green -fill white -opaque green -write MPR:alpha +delete \) \
\( MPR:gradient MPR:alpha -compose copyalpha -composite \) \
+compose -composite result.png
It works like this:
line 1: Load original image
line 2: Clone original image (just to get its size) then set the size for the forthcoming -gradient
the same but rotated 90 degrees so it runs left-right instead of top-bottom. Make the gradient you want, rotate to correct orientation, and save in MPR "Magick Persistent Register" called gradient
for later. Delete it for now.
line 3: Clone the original image. Make all non-green pixels black and all green pixels white. Save in another MPR called alpha
. Delete it for now.
line 4: Reload gradient and alpha from MPRs and force the alpha channel into the gradient. The gradient will now be transparent wherever the original image was not green.
line 5: Reset back to default compose method and composite the new layer (containing gradient transparent where original was not green) over the original image and save.