Bu OUTPUT'u bu INPUT'tan almak için "convert" (?) Hangi parametrelere ihtiyaç duyar?
GİRİŞ:
ÇIKTI:
Bu OUTPUT'u bu INPUT'tan almak için "convert" (?) Hangi parametrelere ihtiyaç duyar?
GİRİŞ:
ÇIKTI:
Yanıtlar:
Görüntülerin sağ tarafla aynı hizada olmasını istemediğim için farklı bir yaklaşım kullanmak zorunda kaldım (ImageMagick'in composite
aracı):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
İstediğiniz son görüntü boyutu olmalı, canvas.png
boş bir beyaz tuval, in.png
doldurmak istediğiniz görüntü ve -geometry
konumlandırma ofseti olmalıdır.
ImageMagick sürümüm '6.7.8-0 2012-07-04 Q16'. Docu'ya göre @kev komutunun cevabı işe yaramalı:
convert in.png -gravity east -extent 520x352 out.png
Bununla birlikte, çoğu ImageMagick sorusunda olduğu gibi, aynı hedefe farklı yollarla ulaşabilirsiniz. Bunun montage
gibi kullanabilirsiniz :
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
Bu, ile birleştirmek için özel 'null:' resmini kullanır in.png
.
Farklı bir boyuta sahip her bir giriş resmi için convert
geçmeniz gereken değerleri yeniden hesaplamanız gerektiği doğrudur -extent
.
identify -format
Görüntünün boyutlarını almak için ilk kullanım :
identify -format '%Wx%H' in.png
Bu şöyle bir şey döndürmelidir:
449x352
Tamam, şimdi son 520x352
değeri elde etmek için istediğiniz 71 pikseli eklemeniz gerekir . Ancak bu hesaplamayı kendi beyninizde yapmanız gerekmez:
ImageMagick kurtarmaya !, ve sihirli hesaplama yetenekleri ... :-)
identify -format
Komutu sizin için bu hesaplamayı yapmasını söyleyebilirsiniz :
identify -format '%[fx:W+71]x%H'
Bu size aşağıdakilerin bir sonucunu vermelidir:
520x352
Herhangi bir resmin sol tarafına yalnızca 71 piksel genişliğinde bir 'beyaz şerit' eklemek / eklemek istediğinizi varsayarsak, aşağıdaki tek komut satırını kullanabilirsiniz:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
İşte bu kadar! Bir komut satırı (dürüst olmak üzere 2 komutu kapsar) ve 71piksel beyaz şeridinizi her birine otomatik olarak sihirli bir şekilde eklemek için bir dizindeki tüm PNG'leriniz, JPEG'leriniz, GIF'leriniz ...
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
Her görüntü için çıktısı aynı dosya tipinde kalır. Tabii ki tüm çıktıları PNG (veya istediğiniz her şey) olarak uygulayabilirsiniz. Sadece %t.%e
komutun bir kısmını %t.png
...
Belgeler: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. 'Doğru yön' için +1 olsa da :-P
-background transparent
Saydam bir arka planı korumak için eklemeliydim .
Bu komutu tanımladım .bash_profile
. Genişlik ve yükseklik olarak istediğiniz dolgudan son görüntü boyutunu otomatik olarak hesaplar (sıfırlarla çalışır):
# 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"
}
Örnek kullanım:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png