Thumbnail persegi dengan ImageMagick (convert)?

32

Bagaimana cara membuat thumbnail berbentuk persegi / terpotong menggunakan ImageMagick? Tanam seperti di bawah ini.

tanam

marioosh
sumber

Jawaban:

19

Ini dijelaskan dalam dokumentasi resmi ImageMagick di bawah, "Potong Thumbnail agar Sesuai" :

Alternatif, daripada mengganti gambar agar sesuai dengan ukuran thumbnail spesifik yang kita inginkan, adalah dengan memotong bagian gambar yang tidak sesuai dengan ukuran akhir.

Tentu saja ini berarti Anda benar-benar kehilangan beberapa bagian gambar asli, terutama bagian tepi gambar, tetapi hasilnya adalah thumbnail yang diperbesar dari bagian tengah gambar. Ini biasanya (tetapi tidak selalu) subjek utama gambar, jadi ini adalah metode praktis pembuatan thumbnail.

Pada IM v6.3.8-3 bendera opsi ukuran khusus '^' telah ditambahkan untuk membuatnya lebih mudah. Kami hanya mengubah ukuran menggunakan bendera ini kemudian memotong bagian gambar yang melebihi ukuran yang diinginkan.

Dan dalam konteks contoh perintah:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif
Ignacio Vazquez-Abrams
sumber
7
Mungkin ... beberapa jenis deskripsi?
Hello71
Saya suka jawaban kosong Ignacio :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
55

Ignacio tertaut ke dokumentasi yang benar, namun saya akan menempelkannya di sini untuk kenyamanan:

convert -define jpeg:size=200x200 original.jpeg  -thumbnail 100x100^ -gravity center -extent 100x100  thumbnail.jpeg

Demikian pula, berikut ini adalah untuk GraphicsMagick:

gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg

Penjelasan:

  • -size 200x200 memberitahu decoder jpeg kita hanya perlu resolusi ini sehingga dapat menghemat memori dan membaca sumber gambar lebih cepat
  • -thumbnail 100x100^ mengubah ukuran cepat membuat sisi terpendek 100
  • - gravity center pusat operasi selanjutnya
  • -extent 100x100 terapkan gambar ke kanvas 100x100
  • +profile "*" jangan menyimpan metainfo apa pun ke jpeg (membuat gambar yang dihasilkan lebih kecil)
Jonah Braun
sumber
3
Ketika saya menggunakannya di baris perintah (satu grafis) saya mendapat gambar di tengah, dua siders diisi dengan putih. Bukan yang dijelaskan dalam pertanyaan. Apakah saya melakukan sesuatu yang salah?
Umut Benzer
2
Jika Anda menggunakan windows, Anda harus menggandakan karakter ^ untuk menghindarinya. Contoh: -thumbnail 100x100 ^^
George Filippakos
3
Kenapa tidak ukuran 100x100?
Hello World
@ Halo Dunia: Baca "Imagemagick Geometry". Google itu, akan mudah ditemukan.
saurabheights
11

Itu adalah cara yang lebih sederhana untuk melakukannya:

Perintah berikut mengubah ukuran sisi yang lebih kecil menjadi 100 piksel dan memotong 100x100 persegi. Anda dapat menambahkan -stripperintah untuk mengurangi ukuran file.

convert original.jpg -resize "100^>" -gravity center \ 
                     -crop 100x100+0+0 -strip thumbnail.jpg

Tidak seperti yang lain, itu tidak mencoba untuk menghemat memori. Sebaliknya, ia melakukan apa yang Anda inginkan, dan tidak lebih. Plus, itu tidak akan meningkatkan gambar.

Reinaldo Guedes
sumber
Saat menambahkan jawaban terlambat ke pertanyaan dengan jawaban yang sudah ada, akan sangat membantu untuk memberikan penjelasan yang cukup mengapa jawaban Anda menawarkan sesuatu yang unik dan baru dibandingkan dengan jawaban lainnya.
Jason Aller
2
Terima kasih, saya tidak tahu mengapa yang lain terlalu rumit jawaban mereka untuk mencoba menghemat memori ketika OP tidak menyebutkan sama sekali tentang ini.
confused00
2

Saya menggunakan graphicmagick untuk menghasilkan thumbnail berukuran tepat tapi saya mengisi gambar dengan kotak-kotak alih-alih memotong overhang.

gm convert -limit Threads 1 -size 320x180 pattern:checkerboard -background transparent -gravity center -resize 320x180 -extent 320x180 original.jpg -flatten -resize 112x65! -interlace Line 1 thumb_112x65.jpg

Opsi dijelaskan.

gm convert

// Single threaded seems faster on smaller files
-limit Threads 1 

// Generate a checkerboard of size 320x180.
// Sets the relative size of the checkerboard squares,
// also sets the desired aspect ratio. In my case (16:9)
-size 320x180 pattern:checkerboard 

// Resize the input image and center it on a transparent layer.
-background transparent -gravity center -resize 320x180 -extent 320x180 orig.jpg

// Merge the layers
-flatten 

// Resize the output to the desired
// The ! causes the aspect ratio to be ignored, fixing any rounding errors.
// (Specify a size with the same aspect ratio as the checkerboard.)
-resize 112x65! 

// Use Progressive JPEG Encoding
-interlace Line 

// Output Image
thumb_112x65.jpg
Ryan Williams
sumber
1

Saya pikir Anda mencari sesuatu seperti:

convert -crop 100x100+50+50 input_image.jpg output_image.jpg 

di mana 100x100adalah ukuran dari persegi panjang akhir dan 50x50yang mengimbangi .

konsepsi
sumber
Memotong gambar itu, tetapi tidak membuat thumbnail.
marioosh
1
@marioosh: Saya tidak mengerti, Anda dapat menggunakan convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, untuk info lebih lanjut, periksa respons Igancio Vazquez untuk contoh atau periksa dokumentasi
pconcepcion
1

Perintah ini memotong kuadrat dan kemudian mengubah ukuran menjadi 150x150

convert 824-full.jpg -set option:size '%[fx:min(w,h)]x%[fx:min(w,h)]' xc:none +swap -gravity center -composite -resize 150x150  temp.jpg

Opsi lainnya tersedia di sini: http://www.imagemagick.org/Usage/thumbnails/#square

michaelbn
sumber