Bagaimana cara memasukkan spasi putih dengan imagemagick?

15

Parameter apa yang "dikonversi" (?) Perlu dapatkan dari OUTPUT ini dari INPUT ini?

MEMASUKKAN:

masukkan deskripsi gambar di sini

KELUARAN:

masukkan deskripsi gambar di sini

peter gasko
sumber

Jawaban:

8

Karena saya tidak ingin gambar rata dengan sisi kanan, saya harus menggunakan pendekatan yang berbeda ( compositealat ImageMagick ):

convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png

-sizeseharusnya ukuran gambar akhir yang Anda inginkan, canvas.pngadalah kanvas putih kosong, in.pngakan menjadi gambar yang ingin Anda pad, dan -geometrymerupakan offset posisi.

mustafa.0x
sumber
15

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 montageseperti 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 convertAnda perlu menghitung kembali nilai-nilai yang harus Anda berikan -extentuntuk setiap gambar input yang memiliki ukuran berbeda.

Penggunaan pertama identify -formatuntuk 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 -formatperintah 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.%ebagian dari perintah dengan %t.png...

Kurt Pfeifle
sumber
8

Dokumentasi: http://www.imagemagick.org/Usage/crop/#extent

convert in.png -gravity east -extent 500x352 out.png
kev
sumber
Terima kasih!! Tetapi bagaimana jika gambar saya tidak 500x352 - karena ukurannya bervariasi?
gasko peter
1
Saya hanya menunjukkan caranya.
kev
@kev: Perintah Anda tidak persis melakukan apa yang diinginkan @ gasko peter. Anda seharusnya sudah menggunakannya -extend 520x352. 1 untuk 'arah yang benar' :-P
Kurt Pfeifle
sed 's # -extend # -extent # g'
Kurt Pfeifle
Saya harus menambahkan -background transparentuntuk menjaga latar belakang yang transparan.
gemetar
0

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 
Jonathan H
sumber