Как добавить границы к изображению, чтобы его размер делился на 4 - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь добавить границы к изображению, используя ImageMagi c, чтобы его размер делился на 4. Я написал:

image_files=( "$alldir"/*.png )

current="${image_files[0]}"
page_height=$(identify -format "%h" $current)
page_width=$(identify -format "%w" $current)

border_x=$((4-(page_width%4) + 40))
border_y=$((4-(page_height%4) + 40))

После использования команды border у меня будет:

page_height= page_height + 2*border_y
page_width= page_width + 2*border_x

Окончательные значения page_height и page_width должны делиться на 4, но ширина является нечетным числом. В чем проблема с моим подходом?

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Вместо того, чтобы вычислять ширину границы на каждой стороне и выполнять изменение размера и заполнение, часто проще вычислить общий размер изображения с рамкой, установить цвет фона и изменить размер изображения до нового размера. Итак, скажем, я начинаю с этого изображения размером 181x149 пикселей:

enter image description here

Теперь я хочу границу 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

enter image description here


Если у вас более старая версия 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
0 голосов
/ 29 марта 2020

Я думаю, что ошибка удваивает ваш расчетный размер границы. Скажите page_width = 1, затем border_x = 43, и ваша конечная page_width = 1 + 2 * 43 = 87

Если вы хотите, чтобы с обеих сторон была граница ~ 40, вы, вероятно, хотите следующее:

border_x=$((4-(page_width%4) + 2*40))
border_y=$((4-(page_height%4) + 2*40))

page_height=$((page_height + border_y))
page_width=$((page_width + border_x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...