Какие параметры нужно преобразовать (?) Для получения этого ВЫХОДА из этого ВХОДА?
ВХОД:
ВЫХОД:
Какие параметры нужно преобразовать (?) Для получения этого ВЫХОДА из этого ВХОДА?
ВХОД:
ВЫХОД:
Ответы:
Поскольку я не хотел, чтобы изображения совпали с правой стороной, мне пришлось использовать другой подход ( 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
смещение позиционирования.
Моя версия 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
-extend 520x352
. +1 за «правильное направление», хотя :-P
-background transparent
чтобы сохранить прозрачный фон.
У меня есть эта команда, определенная в моем .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