Recommendation for compressing JPG files with ImageMagick

后端 未结 10 1274
有刺的猬
有刺的猬 2020-12-04 04:10

I want to compress a JPG image file with ImageMagick but can\'t get much difference in size. By default the output size is bigger than the input. I don\'t know why, but afte

相关标签:
10条回答
  • 2020-12-04 04:46

    Just saying for those who using Imagick class in PHP:

    $im -> gaussianBlurImage(0.8, 10);      //blur
    $im -> setImageCompressionQuality(85);  //set compress quality to 85
    
    0 讨论(0)
  • 2020-12-04 04:46

    Did some experimenting myself here and boy does that Gausian blur make a nice different. The final command I used was:

    mogrify * -sampling-factor 4:2:0 -strip -quality 88 -interlace Plane -define jpeg:dct-method=float -colorspace RGB -gaussian-blur 0.05

    Without the Gausian blur at 0.05 it was around 261kb, with it it was around 171KB for the image I was testing on. The visual difference on a 1440p monitor with a large complex image is not noticeable until you zoom way way in.

    0 讨论(0)
  • 2020-12-04 04:51

    I use always:

    • quality in 85
    • progressive (comprobed compression)
    • a very tiny gausssian blur to optimize the size (0.05 or 0.5 of radius) depends on the quality and size of the picture, this notably optimizes the size of the jpeg.
    • Strip any comment or exif tag

    in imagemagick should be

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

    or in the newer version:

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

    hope this be useful.

    Source link: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/

    From @Fordi in the comments (don't forget to thumbs up his comment if you like): If you dislike blurring, use -sampling-factor 4:2:0 instead. What this does is reduce the chroma channel's resolution to half, without messing with the luminance resolution that your eyes latch onto. If you want better fidelity in the conversion, you can get a slight improvement without an increase in filesize by specifying -define jpeg:dct-method=float - that is, use the more accurate floating point discrete cosine transform, rather than the default fast integer version.

    0 讨论(0)
  • 2020-12-04 04:53

    Here's a complete solution for those using Imagick in PHP:

    $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 讨论(0)
  • 2020-12-04 04:58

    @JavisPerez -- Is there any way to compress that image to 150kb at least? Is that possible? What ImageMagick options can I use?

    See the following links where there is an option in ImageMagick to specify the desired output file size for writing to JPG files.

    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
    

    You will lose some quality by decompressing and recompressing in addition to any loss due to lowering -quality value from the input.

    0 讨论(0)
  • 2020-12-04 04:59

    Once I needed to resize photos from camera for developing:

    • Original filesize: 2800 kB
    • Resolution: 3264x2448

    Command:

    mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05 
    
    • Result filesize 753 kB
    • Resolution 2048x2048

    and I can't see any changes in full screen with my 1920x1080 resolution monitor. 2048 resolution is the best for developing 10 cm photos at maximum quality of 360 dpi. I don't want to strip it.

    edit: I noticed that I even get much better results without blurring. Without blurring filesize is 50% of original, but quality is better (when zooming).

    0 讨论(0)
提交回复
热议问题