Як вставити пробіл у imagemagick?


15

Які параметри потрібно "конвертувати" (?), Щоб отримати цей вихід з цього входу?

ВХОД:

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

ВИХІД:

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

Відповіді:


8

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


15

Моя версія ImageMagick - "6.7.8-0 2012-07-04 Q16". Відповідно до docu, відповідь команди @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...


8

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

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

Спасибі!! Але що робити, якщо моя картина не 500х352 - адже розмір змінюється?
gasko peter

1
Я просто показую, як це робити.
kev

@kev: Ваша команда точно не робить те, що хотів @terko Peter. Ви повинні були використати -extend 520x352. +1 за "правильний напрямок", хоча :-P
Курт Пфайфл,

sed 's # -extend # -extent # g'
Kurt Pfeifle

Довелося додати, -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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.