ImageMagick के साथ जेपीजी फ़ाइलों को संपीड़ित करने के लिए सिफारिश




image-processing (8)

मैं ImageMagick के साथ एक जेपीजी छवि फ़ाइल को संपीड़ित करना चाहता हूं लेकिन आकार में बहुत अंतर नहीं ले सकता। डिफ़ॉल्ट रूप से आउटपुट आकार इनपुट से बड़ा है। मुझे नहीं पता क्यों, लेकिन कुछ + प्रोफाइल विकल्पों को जोड़ने और गुणवत्ता को स्थापित करने के बाद मुझे एक छोटा आकार मिल सकता है लेकिन फिर भी मूल के समान हो सकता है।

इनपुट छवि 255 केबी है, संसाधित छवि 264 केबी है (प्रोफाइल को हटाने और 70% तक गुणवत्ता को स्थापित करने के लिए + प्रोफ़ाइल का उपयोग कर)। क्या उस छवि को कम से कम 150kb तक संपीड़ित करने का कोई तरीका है? क्या यह संभव है? मैं किस छविमैजिक विकल्प का उपयोग कर सकता हूं?


सिर्फ उन लोगों के लिए कह रहे हैं जो PHP में इमेजिक क्लास का उपयोग करते हैं:

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

मैं Google पेजस्पेड अंतर्दृष्टि छवि अनुकूलन दिशानिर्देशों का उपयोग कर रहा हूं, और ImageMagick के लिए वे निम्नलिखित की अनुशंसा करते हैं:

-सामलिंग-कारक 4: 2: 0
-strip
- गुणवत्ता 85 [यह भिन्न हो सकती है, मैं 60-80 रेंज का उपयोग करता हूं]
-interlace
-colorspace आरजीबी

ImageMagick में कमांड:

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

इन विकल्पों के साथ मुझे जेपीईजी आकार में 40% बचत बहुत अधिक हानि के बिना मिलती है।


मैंने सुझाव -adaptive-resize 60% सुझाए गए आदेश में -adaptive-resize 60% का -adaptive-resize 60% , लेकिन -quality 60%

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

ये मेरे परिणाम थे

  • img_original.jpg = 13,913 केबी
  • img_resized.jpg = 845KB

मुझे यकीन नहीं है कि क्या रूपांतरण मेरी छवि को बहुत अधिक नष्ट कर देता है, लेकिन मुझे ईमानदारी से नहीं लगता था कि मेरा रूपांतरण बकवास जैसा दिखता है। यह एक विस्तृत कोण पैनोरमा था और मुझे सावधानीपूर्वक बाधा की परवाह नहीं थी।


@JavisPerez - क्या उस छवि को कम से कम 150kb तक संपीड़ित करने का कोई तरीका है? क्या यह संभव है? मैं किस छविमैजिक विकल्प का उपयोग कर सकता हूं?

निम्न लिंक देखें जहां ImageMagick में जेपीजी फ़ाइलों को लिखने के लिए वांछित आउटपुट फ़ाइल आकार निर्दिष्ट करने के लिए कोई विकल्प है।

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

इनपुट से कम गुणवत्ता के मूल्य को कम करने के कारण आप किसी भी नुकसान के अलावा डिकंप्रेसिंग और रीकंप्रेसिंग करके कुछ गुणवत्ता खो देंगे।


मैं जेपीजी और पीएनजी को कम करने के लिए एक उपयोगी साइड नोट और एक सामान्य सुझाव जोड़ूंगा।

सबसे पहले, ImageMagick इनपुट जेपीईजी संपीड़न स्तर (या बेहतर "अनुमान" ...) पढ़ता है और इसलिए यदि आप सभी में -quality NN नहीं जोड़ते हैं, तो आउटपुट इनपुट के समान स्तर का उपयोग करना चाहिए। कभी-कभी एक महत्वपूर्ण विशेषता हो सकती है। अन्यथा डिफ़ॉल्ट स्तर है - -quality 92 ( www.imagemagick.org देखें)

सुझाव बैच प्रक्रिया के लिए भी एक बहुत ही भयानक मुक्त उपकरण ImageOptim के बारे में है।
आप छोटी jpgs (और पीएनजी भी प्राप्त कर सकते हैं, खासतौर पर मुफ्त ImageAlpha [बैच प्रक्रिया नहीं] या मुफ्त Pngyu के उपयोग के बाद यदि आपको बैच प्रक्रिया की आवश्यकता है)।
न केवल, ये उपकरण मैक और विन के लिए हैं और कमांड लाइन के रूप में हैं (मैं ब्रू का उपयोग करके स्थापित करना और फिर ब्रू सूत्रों में खोज करना चाहता हूं)।


यहां PHP में Imagick का उपयोग करने वालों के लिए एक संपूर्ण समाधान है:

$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);
  }
}

क्या मैंने यहां कुछ प्रयोग किया और लड़का करता है कि गौसियन धुंध एक अच्छा अलग बनाती है। मैंने जो अंतिम आदेश इस्तेमाल किया था वह था:

mogrify * -sampling-factor 4: 2: 0 -स्ट्रिप-क्वालिटी 88 -इंटरलेस प्लेन -डेफिन जेपीईजी: डीटीसी-विधि = फ्लोट-कलर्स स्पेस आरजीबी -गासी-ब्लर 0.05

0.05 पर गौसियन धुंध के बिना यह लगभग 261 केबी था, क्योंकि जिस छवि पर मैं परीक्षण कर रहा था, उसके लिए यह लगभग 171 केबी था। एक बड़ी जटिल छवि के साथ 1440 पी मॉनिटर पर दृश्य अंतर तब तक ध्यान देने योग्य नहीं है जब तक कि आप ज़ूम इन नहीं करते।


एक बार मुझे विकास के लिए कैमरे से फोटो का आकार बदलने की जरूरत है:

  • मूल फाइलसाइज: 2800 केबी
  • संकल्प: 3264x2448

कमान:

mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05 
  • फाइलें 753 केबी का परिणाम बदलें
  • संकल्प 2048x2048

और मैं अपने 1920x1080 रिज़ॉल्यूशन मॉनिटर के साथ पूर्ण स्क्रीन में कोई भी बदलाव नहीं देख सकता। 2048 संकल्प 360 डीपीआई की अधिकतम गुणवत्ता पर 10 सेमी फोटो विकसित करने के लिए सबसे अच्छा है। मैं इसे पट्टी नहीं करना चाहता।

संपादित करें: मैंने देखा है कि मुझे धुंधले बिना भी बेहतर परिणाम मिलते हैं। धुंधला फाइलसाइज के बिना मूल का 50% है, लेकिन गुणवत्ता बेहतर है (ज़ूमिंग करते समय)।







imagemagick