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


246

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

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


3
JPEG रीकंप्रेस करना हमेशा एक बड़ी छवि का परिणाम होगा, भले ही यह बड़ा हो। यह बेहतर होगा यदि आप मूल के साथ शुरू कर सकते हैं इससे पहले कि यह पहली बार बचाया गया था।
मार्क रैनसम

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

जवाबों:


440

मैं हमेशा उपयोग करता हूं:

  • 85 में गुणवत्ता
  • प्रगतिशील (संकुचित संपीड़न)
  • आकार (0.05 या 0.5 त्रिज्या) का अनुकूलन करने के लिए एक बहुत छोटा गॉसियन कलंक तस्वीर की गुणवत्ता और आकार पर निर्भर करता है, यह विशेष रूप से जेपीईजी के आकार का अनुकूलन करता है।
  • किसी भी टिप्पणी या exif टैग को पट्टी करें

छवि में होना चाहिए

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

या नए संस्करण में:

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

आशा है कि यह उपयोगी होगा।

स्रोत लिंक: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/

@Fordi से टिप्पणियों में (यदि आप चाहें तो उसकी टिप्पणी को न भूलें): यदि आप धुंधला करना पसंद करते हैं, तो -sampling-factor 4:2:0इसके बजाय उपयोग करें । यह क्या करता है क्रोमा चैनल के रिज़ॉल्यूशन को घटाकर आधा कर दिया जाता है, बिना ल्यूमिनेन्स रिज़ॉल्यूशन के साथ गड़बड़ किए बिना जो आपकी आँखों पर लचकता है। यदि आप रूपांतरण में बेहतर निष्ठा चाहते हैं, तो आप निर्दिष्ट करके फ़ाइलों में वृद्धि के बिना मामूली सुधार प्राप्त कर सकते हैं -define jpeg:dct-method=float- अर्थात, डिफ़ॉल्ट फास्ट पूर्णांक संस्करण के बजाय अधिक सटीक फ़्लोटिंग पॉइंट असतत कोसाइन रूपांतरण का उपयोग करें।


2
धन्यवाद! इस कोड ने मुझे 170kb पर छवि प्रदान की, अब मैं जा सकता हूं और अपने कोड के साथ प्रयोग कर सकता हूं धन्यवाद, मैंने भी -Dfine पाया है: हद = MAX_SIZE_IN_KB विकल्प जो वास्तव में मदद करता है, धन्यवाद!
जेविस पेरेज़

36
यदि आप फ़ाइलों का एक गुच्छा कर रहे हैं, तो आप भी कर सकते हैं mogrify -strip -interlace Plane -gaussian-blur 0.05 -quality 85% *.jpg। उस कमांड को चलाने से पहले सुनिश्चित करें कि आपके पास बैकअप है। यह जगह में लिखेंगे।
रिचर्ड अयोटे

3
-stripमेरे लिए किया। साभार
निगेल एंजेल

38
मुझे बहुत धुंधली छवियां मिलीं। यह अंतरिक्ष को बचाने के लिए जानबूझकर छवि को धुंधला करने के लिए उल्टा लगता है। क्या यह कम गुणवत्ता वाले% का उपयोग करने के लिए अधिक समझ में नहीं आएगा? स्पष्ट छवि गुणवत्ता को बनाए रखते हुए स्थान को बचाने के लिए गुणवत्ता-बदलने की प्रक्रिया बहुत अच्छी है। मैंने अपनी छवि पर एक 0.05 गाऊसी धब्बा लगाया और इसने कुछ जगह बचाई लेकिन बिल्कुल बकवास की तरह देखा। मैं उपयोग करने पर बस गया mogrify -strip -quality 75% *.jpg। पट्टी महान है। 0 गुणवत्ता की हानि, और बड़ी जगह की बचत। और 75% की गुणवत्ता 100% से मुश्किल से अलग है, लेकिन आधी जगह लेती है।
ब्यूटेल बटुक

80
यदि आप धुंधलापन नापसंद करते हैं, तो इसके बजाय -sampling-factor 4: 2: 0 का उपयोग करें। यह क्या करता है क्रोमा चैनल के रिज़ॉल्यूशन को घटाकर आधा कर दिया जाता है, बिना ल्यूमिनेन्स रिज़ॉल्यूशन के साथ गड़बड़ किए बिना जो आपकी आँखों पर लचकता है। यदि आप रूपांतरण में बेहतर निष्ठा चाहते हैं, तो आप निर्दिष्ट करके थोड़ी-बहुत सुधार कर सकते हैं, जैसे -डिफ़ाइन jpeg द्वारा फाइल में वृद्धि के बिना: dct-method = float - अर्थात, डिफ़ॉल्ट रूप के बजाय अधिक सटीक फ़्लोटिंग पॉइंट असतत कोसाइन रूपांतरण का उपयोग करें पूर्णांक संस्करण।
फोर्डि

67

मैं Google पेजस्पीड इनसाइट्स इमेज ऑप्टिमाइजेशन दिशा-निर्देशों का उपयोग कर रहा हूं , और इमेजमैजिक के लिए वे निम्नलिखित की सलाह देते हैं:

-sampling कारक 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% तक की बचत बिना ज्यादा नुकसान के मिल जाती है।


16

PHP में इमेजिक क्लास का उपयोग करने वालों के लिए बस यह कह रहा हूँ:

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

14

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

  • मूल फ़ाइलें: 2800 kB
  • संकल्प: 3264x2448

कमान:

mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05 
  • परिणाम 753 kB फाइल करता है
  • संकल्प 2048x2048

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

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


आपको "-Filter Lanczos" नहीं जोड़ना है। यह डिफ़ॉल्ट imagemagick.org/script/command-line-options.php#filter
Ilya Prokin

जैसा कि ऊपर कहा गया है - फ़ाइल को छोटा करने के लिए छवि रिज़ॉल्यूशन को कम करना बेकार है। बजाय JPEG गुणवत्ता कम! आप इसे स्वयं परीक्षण कर सकते हैं - 97% JPEG के साथ दो छवियों की तुलना करें और किसी अन्य को 68% कहने के लिए परिवर्तित किया जाए और 100 पिक्सेल ज़ूम में देखने पर भी किसी पिक्सेल को अलग होते हुए देखने में आपको वास्तव में कठिन समय होगा! स्टॉक कैमरा और फोन की सेटिंग हास्यास्पद रूप से उच्च है, जिससे आप अपने पीसी के लिए बड़े स्टोरेज और बड़े HDD के साथ नए फोन खरीदना चाहते हैं ... photo.stackexchange.com/questions/30243/…
McVitas

10

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

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

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


मैंने लिनक्स के लिए pngquant का उपयोग किया । यह ImageAlpha पेज पर संदर्भित किया गया था। संकेत के लिए धन्यवाद
अलेक्जेंडर Ryhlitsky

8

मैंने -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,913KB
  • img_resized.jpg = 845KB

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


5

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

निम्नलिखित लिंक देखें जहां JPG फ़ाइलों को लिखने के लिए वांछित आउटपुट फ़ाइल आकार निर्दिष्ट करने के लिए 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

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


4

क्या कुछ खुद को यहाँ प्रयोग करते हैं और लड़का करता है कि गॉसियन कलंक एक अच्छा अलग बनाते हैं। अंतिम कमांड जिसका मैंने उपयोग किया था:

mogrify * -सैंपलिंग-फैक्टर 4: 2: 0 -स्ट्रिप -क्वालिटी 88-वर्धमान प्लेन -define jpeg: dct-method = float -colorspace RGB -gaussian-blur 0.05

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


ध्यान दें कि गाऊसी धुंधला छोटे चित्रों के साथ बुरी तरह से काम करता है, लेकिन बड़े लोगों के लिए होना चाहिए!
एंटोनिन GAVREL

4

यहाँ 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);
  }
}

0

यदि छवि बड़ी डिमनेशन है, तो आकार बदलने के बिना अच्छे परिणाम प्राप्त करना मुश्किल है, नीचे 60 प्रतिशत का आकार परिवर्तन किया गया है, जो कि अधिकांश उद्देश्यों के लिए छवि को बहुत अधिक नष्ट नहीं करता है।

मैं इसे ग्रे-स्केल छवियों के लिए अच्छे परिणाम के साथ उपयोग करता हूं (मैं पीएनजी से कन्वर्ट करता हूं):

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

मैं इसका उपयोग स्कैन किए गए B & W पृष्ठों के लिए उन्हें ग्रे-स्केल छवियों (पिछले पृष्ठों से अतिरिक्त छाया साफ करता है) के लिए करता हूं:

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 

मैं इसका उपयोग रंगीन चित्रों के लिए करता हूं:

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 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.