Вместо того, чтобы вычислять ширину границы на каждой стороне и выполнять изменение размера и заполнение, часто проще вычислить общий размер изображения с рамкой, установить цвет фона и изменить размер изображения до нового размера. Итак, скажем, я начинаю с этого изображения размером 181x149 пикселей:
Теперь я хочу границу 40 пикселей, поэтому я установил переменную оболочки:
border=40
, тогда я могу центрировать изображение на желтом фоне, например:
magick input.png -background yellow -gravity center -extent "%[fx:w-w%4+2*$border]x%[fx:h-h%4+2*$border]" +repage result.png
Если у вас более старая версия ImageMagick v6, которая не любит выполнять математические вычисления, вы можете позволить своей оболочке сделать это:
border=40
# Get width and height in one go with a bash "process substitution"
read w h < <(identify -format "%w %h" input.png)
convert input.png -background yellow -gravity center -extent "$((w-w%4+2*$border))x$((h-h%4+2*$border))" +repage result.png