ImageMagick ile kare küçük resimler (dönüştür)?


Yanıtlar:


19

Bu, “Resmin Sığdırılması İçin Küçük Resim” başlıklı resmi ImageMagick belgelerinde açıklanmıştır :

Alternatif olarak, görüntüyü istediğimiz küçük resim boyutuna sığdırmak yerine çıkarmak yerine, görüntünün son boyuta uymayan kısımlarını kesmektir.

Elbette bu, orijinal görüntünün bazı kısımlarını, özellikle görüntünün kenarlarını gerçekten kaybettiğiniz anlamına gelir, ancak sonuç, görüntünün orta kısmının büyütülmüş bir küçük resmidir. Bu genellikle (ancak her zaman değil) görüntünün ana konusudur, bu nedenle pratik bir küçük resim oluşturma yöntemidir.

IM v6.3.8-3'ten itibaren, bunu kolaylaştırmak için özel yeniden boyutlandırma seçeneği '^' bayrağı eklendi. Bu bayrağı kullanarak sadece yeniden boyutlandırtıktan sonra görüntünün istenen boyutu aşan kısımlarını keseriz.

Ve bir örnek komut bağlamında:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif

7
Muhtemelen ... bir tür açıklama?
Merhaba71,

Ignacio’nın boş cevaplarını seviyorum :-)
Ciro Santilli

55

Ignacio doğru belgelerle bağlantılı, ancak kolaylık olması için buraya satır içi yapıştıracağım:

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

Benzer şekilde, aşağıdakiler GraphicsMagick içindir:

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

Açıklama:

  • -size 200x200 jpeg kod çözücüye yalnızca bu çözünürlüğe ihtiyacımız olduğunu söyler, böylece hafızadan tasarruf edebilir ve kaynak görüntüyü daha hızlı okuyabilir
  • -thumbnail 100x100^ en kısa kenarı 100 yaparak hızlı yeniden boyutlandırma
  • - gravity center sonraki işlemi ortala
  • -extent 100x100 görüntüyü 100x100 tuvale uygulayın
  • +profile "*" metainfo'yu jpeg'e kaydetmeyin (elde edilen görüntüyü daha küçük yapar)

3
Komut satırında kullandığımda (grafik magick one) ortada resim çektim, iki taraf beyazla dolu. Söz konusu olan değil. Yanlış bir şey mi yapıyorum?
Umut Benzer

2
Pencereleri kullanıyorsanız, kaçmak için ^ karakterini iki katına çıkarmalısınız. Örneğin: -thumbnail 100x100 ^^
George Filippakos

3
Neden 100x100 beden değil?
Merhaba Dünya

@HelloWorld: "Imagemagick Geometri" bölümünü okuyun. Google onu bulmak kolay olacak.
saurabheights

11

Bunu yapmanın daha basit bir yolu:

Aşağıdaki komut, daha küçük olanı 100 piksele yeniden boyutlandırır ve 100x100 kare boyutunda bir kırpma yapar -stripDosya boyutunu küçültmek için bir komut ekleyebilirsiniz .

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

Diğerlerinden farklı olarak, hafızadan tasarruf etmeye çalışmıyor. Bunun yerine, istediğinizi yapar ve daha fazlası yok. Ayrıca, görüntülerin kalitesini yükseltmez.


Belirlenmiş cevapları olan bir soruya geç cevap eklerken, cevabınızın neden diğer cevaplara göre benzersiz ve yeni bir şey sunduğunu açıklamak yeterlidir.
Jason Aller

2
Teşekkürler, OP neden hiçbir şeyden bahsetmiyorsa diğerlerinin neden hafızadan tasarruf etmek için cevaplarını çok fazla karmaşık hale getirdiklerini bilmiyorum.
karıştı00

2

Kesin boyutta küçük resimler oluşturmak için graphicsmagick kullanıyorum ancak görüntüyü, çıkıntıyı kırpmak yerine bir dama tahtası ile dolduruyorum.

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

Seçenekler açıklandı.

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

1

Sanırım şöyle bir şey arıyorsun:

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

burada 100x100bir boyut son dikdörtgen ve ofset .50x50


Bu görüntüyü kırp, ancak küçük yapmaz.
marioosh

1
@ marioosh: Anlamadım, kullanabilirsiniz convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, daha fazla bilgi için Igancio Vazquez'in bir örneğini yanıtlayın veya belgelere bakın
pconcepcion

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.