11

Какие параметры "конвертирует" (?) нужно получить этот выход из этого входа?

ВХОД:

ВЫХОД:

4 ответа4

14

Моя версия 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 ...

7

Документация: http://www.imagemagick.org/Usage/crop/#extent

convert in.png -gravity east -extent 500x352 out.png
5

Поскольку я не хотел, чтобы изображения были вровень с правой стороной, мне пришлось использовать другой подход (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 - это смещение позиционирования.

0

У меня есть эта команда, определенная в моем .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 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .