JPG dosyalarını ImageMagick ile sıkıştırma önerisi


246

Bir JPG resim dosyasını ImageMagick ile sıkıştırmak istiyorum, ancak boyutta çok fazla fark elde edemiyorum. Varsayılan olarak çıktı boyutu girişten daha büyüktür. Nedenini bilmiyorum, ancak bazı + profil seçenekleri ekledikten ve kaliteyi ayarladıktan sonra daha küçük bir boyut elde edebilirim ama yine de orijinaline benzerim.

Giriş görüntüsü 255kb, işlenen görüntü 264kb'dir (profilleri kaldırmak için + profilini kullanarak ve kaliteyi% 70'e ayarlayın). Bu görüntüyü en az 150 kb'ye sıkıştırmanın bir yolu var mı? Mümkün mü? Hangi ImageMagick seçeneklerini kullanabilirim?


3
Bir JPEG'in yeniden sıkıştırılması, daha büyük olsa bile, her zaman bozuk bir görüntüye neden olur. İlk defa kaydedilmeden önce orijinalle başlayabilmeniz daha iyi olur.
Mark Ransom

Biliyorum, ama ne yazık ki orijinal görüntüye sahip değilim, tüm sahip olduğum büyük bir jpg dosyası, ancak kalite ve boyut arasında iyi bir denge elde edebileceğimi düşünüyorum
Javis Perez

Yanıtlar:


440

Her zaman kullanıyorum:

  • 85 kalite
  • aşamalı (sıkıştırılmış sıkıştırma)
  • boyutu optimize etmek için çok küçük bir gausssian bulanıklık (0.05 veya 0.5 yarıçap) resmin kalitesine ve boyutuna bağlıdır, bu özellikle jpeg boyutunu optimize eder.
  • Herhangi bir yorumu veya exif etiketini kaldırın

imagemagick olmalı

convert -strip -interlace Plane -gaussian-blur 0.05 -quality 85% source.jpg result.jpg

veya daha yeni bir sürümde:

magick source.jpg -strip -interlace Plane -gaussian-blur 0.05 -quality 85% result.jpg

umarım bu faydalı olur.

Kaynak bağlantı: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/

Yorumlarda @Fordi'den (isterseniz yorumunu beğenmeyi unutmayın): Bulanıklığı sevmiyorsanız, -sampling-factor 4:2:0bunun yerine kullanın. Bunun yaptığı, gözlerinizin mandalladığı parlaklık çözünürlüğünü bozmadan renk kanalının çözünürlüğünü yarıya düşürmektir. Dönüştürmede daha iyi doğruluk istiyorsanız, dosya boyutunda bir artış olmadan hafif bir iyileşme elde edebilirsiniz -define jpeg:dct-method=float- yani, varsayılan hızlı tamsayı sürümü yerine daha doğru kayan nokta ayrık kosinüs dönüşümü kullanın.


2
Teşekkür ederim! Bu kod bana 170kb için görüntü var, şimdi gidip kodunuz ile deneyebilirsiniz teşekkür ederim, ayrıca ben -define buldum: gerçekten yardımcı olan: = =_S_SIZE_IN_KB seçeneği, teşekkür ederim!
Javis Perez

36
Bir sürü dosya yapıyorsanız, bunu da yapabilirsiniz mogrify -strip -interlace Plane -gaussian-blur 0.05 -quality 85% *.jpg. Bu komutu çalıştırmadan önce bir yedeğiniz olduğundan emin olun. Yerine yazacak.
Richard Ayotte

3
-stripbenim için yaptım. Teşekkürler
Nigel Angel

38
Çok bulanık görüntülerim var. Yer kazanmak için görüntüyü kasıtlı olarak bulanıklaştırmak verimsiz görünüyor. Daha düşük bir kalite% kullanmak daha anlamlı olmaz mıydı? Kaliteyi değiştiren süreç, görüntü kalitesini korurken yerden tasarruf etmekte oldukça iyidir. Resmime 0.05 gauss bulanıklığı koydum ve biraz yer kazandı ama tamamen saçmalık gibi görünüyordu. Kullanmaya karar verdim mogrify -strip -quality 75% *.jpg. Strip harika. 0 kalite kaybı ve büyük alan tasarrufu. Ve% 75'teki kalite% 100'den neredeyse ayırt edilemez, ancak alanın yarısını alır.
Buttle Butkus

80
Bulanıklaştırmayı sevmiyorsanız, bunun yerine -sampling-factor 4: 2: 0 kullanın. Bunun yaptığı, gözlerinizin mandalladığı parlaklık çözünürlüğünü bozmadan renk kanalının çözünürlüğünü yarıya düşürmektir. Dönüşümde daha iyi doğruluk istiyorsanız, -define jpeg: dct-method = float - yani varsayılan hızlıdan daha doğru kayan nokta ayrık kosinüs dönüşümü belirterek dosya boyutunda bir artış olmadan hafif bir iyileşme elde edebilirsiniz. tamsayı sürümü.
Fordi

67

Ben kullanıyorum tarihinde Pagespeed Insights görüntü optimizasyonu kurallar ve ImageMagick onlar şunları öneriyoruz:

-sampling-faktör 4: 2: 0
-strip
-quality 85 [ı aralığı 60-80 kullanmak, değişebilir, düşük sayısı, burada daha küçük bir dosya anlamına gelmektedir]
-interlace
-colorspace RGB

ImageMagick'teki komut:

convert image.jpg -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB image_converted.jpg

Bu seçeneklerle çok fazla kayıp olmadan JPEG boyutunda% 40'a varan tasarruf elde ederim.


16

PHP'de Imagick sınıfını kullananlar için:

$im -> gaussianBlurImage(0.8, 10);      //blur
$im -> setImageCompressionQuality(85);  //set compress quality to 85

14

Bir kez geliştirmek için kameradan fotoğrafları yeniden boyutlandırmak gerekiyordu:

  • Orijinal dosya boyutu: 2800 kB
  • Çözüm: 3264x2448

Komut:

mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05 
  • Sonuç dosya boyutu 753 kB
  • Çözünürlük 2048x2048

1920x1080 çözünürlük monitörümle tam ekranda herhangi bir değişiklik göremiyorum. 2048 çözünürlük, maksimum 360 dpi kalitesinde 10 cm fotoğraflar geliştirmek için en iyisidir. Bunu soymak istemiyorum.

edit: Ben bile bulanıklık olmadan çok daha iyi sonuçlar elde ettim. Bulanıklaştırma olmadan dosya boyutu orijinalin% 50'sidir, ancak kalite (yakınlaştırma sırasında) daha iyidir.


"-Filter Lanczos" eklemeniz gerekmez. Varsayılan olarak ayarlanmıştır imagemagick.org/script/command-line-options.php#filter
Ilya Prokin

Yukarıda belirtildiği gibi - dosyayı küçültmek için görüntü çözünürlüğünü düşürmek işe yaramaz. Bunun yerine JPEG kalitesini düşürün! Kendiniz test edebilirsiniz - iki görüntüyü% 97 JPEG ve anothern ile% 68 diyelim. Stok fotoğraf makinesi ve telefon ayarları, PC'leriniz için daha büyük depolama alanına ve daha büyük HDD'lere
McVitas

10

Yararlı bir yan not ve JPG ve PNG'yi en aza indirmek için genel bir öneri eklerdim.

Her şeyden önce, ImageMagick giriş jpeg sıkıştırma seviyesini okur (veya daha iyi "tahmin" ...) ve böylece hiç eklemezseniz -quality NN, çıktı girişle aynı seviyeyi kullanmalıdır. Bazen önemli bir özellik olabilir. Aksi takdirde varsayılan düzey -quality 92(bkz. Www.imagemagick.org )

Öneri toplu işlem için de gerçekten harika bir ücretsiz ImageOptim aracı hakkında .
Sen (özellikle serbest kullanımından sonra, sıra ve pngs küçük jpgs alabilirsiniz ImageAlpha [değil kesikli süreç] veya serbest Pngyu toplu işlemi gerekiyorsa).
Sadece bu araçlar Mac ve Win için ve Komut Satırı olarak ( Brew kullanarak yüklemeyi ve sonra Brew formüllerinde arama yapmayı öneririm ).


Linux için pngquant kullandım . Buna ImageAlpha sayfasında atıfta bulunuldu. İpucu için teşekkürler
Alexander Ryhlitsky

8

-adaptive-resize 60%Önerilen komuta ekledim ama ile -quality 60%.

convert -strip -interlace Plane -gaussian-blur 0.05 -quality 60% -adaptive-resize 60% img_original.jpg img_resize.jpg

Bunlar benim sonuçlarımdı

  • img_original.jpg = 13,913KB
  • img_resized.jpg = 845KB

Bu dönüşümün imajımı çok fazla yok edip etmediğinden emin değilim, ama dürüstçe benim dönüşümümü bok gibi görünüyordu. Geniş açılı bir panoramaydı ve titiz bir engelle ilgilenmedim.


5

@JavisPerez - Bu görüntüyü en az 150 kb'ye sıkıştırmanın bir yolu var mı? Mümkün mü? Hangi ImageMagick seçeneklerini kullanabilirim?

ImageMagick'te JPG dosyalarına yazmak için istenen çıktı dosyası boyutunu belirleme seçeneğinin bulunduğu aşağıdaki bağlantılara bakın.

http://www.imagemagick.org/Usage/formats/#jpg_write http://www.imagemagick.org/script/command-line-options.php#define

-define jpeg:extent={size} As of IM v6.5.8-2 you can specify a maximum output filesize for the JPEG image. The size is specified with a suffix. For example "400kb".

convert image.jpg -define jpeg:extent=150kb result.jpg

Girişteki kalite değerinin düşürülmesinden kaynaklanan herhangi bir kaybın yanı sıra sıkıştırmayı ve yeniden sıkıştırarak bir miktar kalite kaybedersiniz.


4

Burada kendimi denemek istedim ve çocuk Gausian bulanıklığının güzel olmasını sağlıyor. Kullandığım son komut şuydu:

mogrifiye * - örnekleme faktörü 4: 2: 0 - şerit - kalite 88 - ara düzlem Düzlem - tanım jpeg: dct-yöntem = şamandıra -renk-renk RGB-gauss-bulanıklık 0.05

0.05'te Gaus bulanıklığı olmadan 261kb civarındaydı, test ettiğim görüntü için 171KB civarındaydı. Büyük, karmaşık bir görüntüye sahip 1440p monitördeki görsel fark, siz yaklaşana kadar fark edilmez.


Gauss bulanıklığının küçük görüntülerle kötü çalıştığını, ancak büyük olanlar için olması gerektiğini unutmayın!
Antonin GAVREL

4

PHP'de Imagick kullananlar için eksiksiz bir çözüm :

$im = new \Imagick($filePath);
$im->setImageCompression(\Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(85);
$im->stripImage();
$im->setInterlaceScheme(\Imagick::INTERLACE_PLANE);

// Try between 0 or 5 radius. If you find radius of 5 
// produces too blurry  pictures decrease to 0 until you 
// find a good balance between size and quality. 
$im->gaussianBlurImage(0.05, 5);



// Include this part if you also want to specify a maximum size for the images

$size = $im->getImageGeometry();
$maxWidth = 1920;
$maxHeight = 1080;


// ----------
// |        |
// ----------
if($size['width'] >= $size['height']){
  if($size['width'] > $maxWidth){
    $im->resizeImage($maxWidth, 0, \Imagick::FILTER_LANCZOS, 1);
  }
}


// ------
// |    |
// |    |
// |    |
// |    |
// ------
else{
  if($size['height'] > $maxHeight){
    $im->resizeImage(0, $maxHeight, \Imagick::FILTER_LANCZOS, 1);
  }
}

0

Resmin büyük boyutları varsa, yeniden boyutlandırma yapmadan iyi sonuçlar elde etmek zorsa, aşağıda yüzde 60 boyutlandırma, çoğu amaç için görüntünün çok fazla tahrip edilmediğini gösterir.

Bunu gri ölçekli görüntüler için iyi sonuçla kullanıyorum (PNG'den dönüştürüyorum):

ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -adaptive-resize 60%   -gaussian-blur 0.05 -colorspace Gray -quality 20  {}.jpg

Taranan B&W sayfaları gri ölçekli görüntülere almak için bunu kullanıyorum (ekstra argümanlar önceki sayfalardaki gölgeleri temizler):

ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -adaptive-resize 60%   -gaussian-blur 0.05 -colorspace Gray -quality 20 -density 300 -fill white -fuzz 40% +opaque "#000000" -density 300 {}.jpg 

Bunu renkli görüntüler için kullanıyorum:

ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -adaptive-resize 60%   -gaussian-blur 0.05 -colorspace RGB -quality 20  {}.jpg 
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.