Які параметри потрібно "конвертувати" (?), Щоб отримати цей вихід з цього входу?
ВХОД:
ВИХІД:
Які параметри потрібно "конвертувати" (?), Щоб отримати цей вихід з цього входу?
ВХОД:
ВИХІД:
Відповіді:
Оскільки я не хотів, щоб зображення врівень з правою стороною, мені довелося використовувати інший підхід ( 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". Відповідно до 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
...
Документація: 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