Parameter apa yang "dikonversi" (?) Perlu dapatkan dari OUTPUT ini dari INPUT ini?
MEMASUKKAN:
KELUARAN:
Parameter apa yang "dikonversi" (?) Perlu dapatkan dari OUTPUT ini dari INPUT ini?
MEMASUKKAN:
KELUARAN:
Jawaban:
Karena saya tidak ingin gambar rata dengan sisi kanan, saya harus menggunakan pendekatan yang berbeda ( composite
alat ImageMagick ):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
seharusnya ukuran gambar akhir yang Anda inginkan, canvas.png
adalah kanvas putih kosong, in.png
akan menjadi gambar yang ingin Anda pad, dan -geometry
merupakan offset posisi.
Versi ImageMagick saya adalah '6.7.8-0 2012-07-04 Q16'. Menurut dokumen tersebut, jawaban dari perintah @kev harus berfungsi:
convert in.png -gravity east -extent 520x352 out.png
Namun, seperti pada kebanyakan pertanyaan ImageMagick, Anda dapat mencapai tujuan yang sama dengan cara yang berbeda. Anda bisa menggunakan montage
seperti ini:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
Ini menggunakan gambar 'null:' khusus untuk menggabungkannya dengan in.png
.
Memang benar bahwa dengan convert
Anda perlu menghitung kembali nilai-nilai yang harus Anda berikan -extent
untuk setiap gambar input yang memiliki ukuran berbeda.
Penggunaan pertama identify -format
untuk mendapatkan dimensi gambar:
identify -format '%Wx%H' in.png
Ini akan menghasilkan sesuatu seperti:
449x352
Ok, sekarang Anda perlu menambahkan 71 piksel yang Anda inginkan, untuk mendapatkan nilai akhir 520x352
. Tetapi Anda tidak perlu melakukan perhitungan itu di otak Anda sendiri:
ImageMagick untuk menyelamatkan !, dan kemampuan perhitungan ajaibnya ... :-)
Anda dapat memberi tahu identify -format
perintah untuk melakukan perhitungan itu untuk Anda:
identify -format '%[fx:W+71]x%H'
Ini sekarang akan memberi Anda hasil dari:
520x352
Jadi dengan asumsi Anda hanya ingin membuat / menambahkan 'strip putih' dengan lebar 71 piksel di sebelah kiri gambar apa pun, Anda dapat menggunakan baris perintah tunggal berikut:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
Voila! Satu baris perintah (yang merangkum 2 perintah, jujur saja) dan Anda bisa membiarkan yang satu ini lepas pada semua PNG, JPEG, GIF, ... dalam direktori Anda yang secara otomatis menambahkan strip putih 71pixels ke masing-masingnya:
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
Untuk setiap gambar outputnya tetap filetype yang sama. Tentu saja Anda dapat menegakkan semua output menjadi PNG (atau apa pun yang Anda inginkan). Cukup ganti %t.%e
bagian dari perintah dengan %t.png
...
Dokumentasi: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. 1 untuk 'arah yang benar' :-P
-background transparent
untuk menjaga latar belakang yang transparan.
Saya memiliki perintah ini didefinisikan dalam .bash_profile
. Ini akan secara otomatis menghitung ukuran gambar akhir dari padding yang Anda inginkan dalam lebar dan tinggi (berfungsi dengan nol):
# 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"
}
Contoh penggunaan:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png