Какие параметры "конвертирует" (?) нужно получить этот выход из этого входа?
ВХОД:
ВЫХОД:
Какие параметры "конвертирует" (?) нужно получить этот выход из этого входа?
ВХОД:
ВЫХОД:
Моя версия ImageMagick '6.7.8-0 2012-07-04 Q16'. Согласно документу ответ команды @kev должен работать:
convert in.png -gravity east -extent 520x352 out.png
Однако, как и в большинстве вопросов ImageMagick, вы можете достичь одной и той же цели разными способами. Вы можете использовать montage
так:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
При этом используется специальное изображение 'null:' для объединения его с in.png
.
Это правда, что с помощью convert
вам нужно пересчитать значения, которые нужно передать в -extent
для каждого входного изображения, имеющего другой размер.
Сначала используйте identify -format
для получения размеров изображения:
identify -format '%Wx%H' in.png
Это должно вернуть что-то вроде:
449x352
Хорошо, теперь вам нужно добавить требуемые 71 пиксель, чтобы получить окончательное значение 520x352
. Но вам не нужно делать этот расчет в своем мозгу:
ImageMagick на помощь !, и его магические возможности расчета ... :-)
Вы можете указать команде identify -format
сделать этот расчет за вас:
identify -format '%[fx:W+71]x%H'
Теперь это должно дать вам результат:
520x352
Поэтому, если вы хотите просто добавить / добавить «белую полосу» шириной 71 пиксель слева от любого изображения, вы можете использовать следующую единственную командную строку:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
Вуаля! Одна командная строка (которая, если честно, включает в себя 2 команды), и вы можете позволить этой команде проигрывать все ваши PNG, JPEG, GIF, ... в каталоге, чтобы автоматически волшебным образом добавить белую полосу размером 71 пиксель к каждой из них:
for i in *.png *.jpeg *jpg *.gif; do
convert \
${i} \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' ${i}) \
$(convert ${i} -format "71-pixels-padded-left---%t.%e" info:)
done
Для каждого изображения его вывод остается одинаковым типом файла. Конечно, вы можете использовать все выходные данные в формате PNG (или как хотите). Просто замените часть команды %t.%e
на %t.png
...
Документация: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
Поскольку я не хотел, чтобы изображения были вровень с правой стороной, мне пришлось использовать другой подход (composite
инструмент ImageMagick):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
должен быть конечным размером изображения, который вы хотите, canvas.png
- это пустой белый холст, in.png
- это изображение, которое вы хотите заполнить , а -geometry
- это смещение позиционирования.
У меня есть эта команда, определенная в моем .bash_profile
. Он автоматически вычислит окончательный размер изображения из требуемого отступа по ширине и высоте (работает с нулями):
# arithmetic with awk
calc() { awk "BEGIN { print $* }"; }
# pad an image
img_pad() {
local width height pw ph
[ $# -lt 3 ] && { echo "Usage: img_pad <Input> <WxH> <Output>"; return; }
# parse current size and padding
IFS=x read width height <<< "$(identify "$1" | awk '{print $3}')"
IFS=x read pw ph <<< "$2"
# new widht and height
width=$(calc "$width + 2*$pw")
height=$(calc "$height + 2*$ph")
echo "Converting '$1' to '$3' with size ${width}x${height} (+w=${pw}, +h=${ph})."
convert "$1" -gravity center -extent "${width}x${height}" "$3"
}
Пример использования:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png