How do I change the canvas size of a PNG with ImageMagick (GraphicsMagick)? (How to pad with transparency?)
Alternatively: How do I take a non-square PNG and "fill out" the "rest" of the image with transparency so that the resulting square image has the original image centered in the square?
ULTIMATELY, what I want is to take any image of any GM-supported format of any size, and create a scaled-down PNG (say, 40 pixels maximum for either dimension), with aspect ratio maintained, transparency-padded for non-square original images, AND with an already-prepared 40x40 PNG transparency mask applied.
I already know how to scale down and keep aspect ratio; I already have the command for applying my composite. My only missing piece is square-alizing non-square images (padding with transparency).
Single command preferred; multi-command chain acceptable.
(edit)
Extra info: Here's the composite command I'm using:
gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png
where mask.png has white pixels for what I want to keep of source-and-target.png and transparent pixels for what I want to remove (and become transparent) of source-and-target.png.
Solution 1:
This command will take any sized input file and fit it best to a 40x40 square and pad with transparency:
convert \
original.png \
-thumbnail '40x40>' \
-background transparent \
-gravity center \
-extent 40x40 \
-compose Copy_Opacity \
-composite mask.png \
original-resized.png
The gravity
option ensures the image is centered in both directions, and transparent
is used wherever there are no pixels. Then the compositing is done with the mask.png
Solution 2:
One command to convert all PNGs from one folder:
mogrify \
-resize 50x50 \
-background transparent \
-gravity center \
-extent 50x50 \
-format png \
-path resized \
*.png
mogrify is a command from ImageMagick package. You have to create output directory first.
Solution 3:
Here's what I eventually went with. A two step process:
gm convert \
-thumbnail '40x40>' \
-background transparent \
-gravity center \
-extent 40x40 \
original.png \
intermediate.png
gm composite \
-compose in \
intermediate.png \
mask.png \
out.png
Where mask.png is white pixels for what I wanted to keep, and transparent pixels for what I wanted to mask out (discard).