Как вставить пробел с помощью imagemagick?

13

Какие параметры нужно преобразовать (?) Для получения этого ВЫХОДА из этого ВХОДА?

ВХОД:

введите описание изображения здесь

ВЫХОД:

введите описание изображения здесь

Гаско Питер
источник

Ответы:

7

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

mustafa.0x
источник
15

Моя версия 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
кэв
источник
Спасибо!! Но что, если моя картинка не 500x352 - потому что размер варьируется?
Гаско Питер
1
Я просто покажу вам как.
Кев
@kev: Ваша команда точно не делает то, что хотел @gasko Питер. Вы должны были использовать -extend 520x352. +1 за «правильное направление», хотя :-P
Курт Пфайфл
sed 's # -extend # -extent # g'
Курт Пфайфл
Мне пришлось добавить, -background transparentчтобы сохранить прозрачный фон.
Тремби
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 
Sheljohn
источник