ImageMagick으로 JPG 파일을 압축하기위한 권장 사항


246

ImageMagick으로 JPG 이미지 파일을 압축하고 싶지만 크기 차이는 크지 않습니다. 기본적으로 출력 크기는 입력보다 큽니다. 왜 그런지 모르겠지만 + 프로필 옵션을 추가하고 품질을 설정하면 더 작은 크기를 얻을 수 있지만 여전히 원본과 비슷합니다.

입력 이미지는 255kb이고 처리 된 이미지는 264kb입니다 (+ profile을 사용하여 프로파일을 제거하고 품질을 70 %로 설정). 해당 이미지를 150kb 이상으로 압축하는 방법이 있습니까? 가능합니까? 어떤 ImageMagick 옵션을 사용할 수 있습니까?


3
JPEG를 재 압축하면 이미지가 더 커도 항상 이미지 품질이 저하됩니다. 원본을 처음 저장하기 전에 원본을 시작할 수 있다면 더 좋습니다.
Mark Ransom

알지만, 불행히도 나는 원본 이미지를 가지고 있지 않습니다. 내가 가진 모든 것은 큰 jpg 파일이지만 품질과 크기 사이의 균형을 잘 잡을 수 있다고 생각합니다
Javis Perez

답변:


440

나는 항상 사용합니다 :

  • 85의 품질
  • 프로그레시브 (압축 된 압축)
  • 크기 (반경의 0.05 또는 0.5)를 최적화하기위한 초소형 가우시안 블러는 사진의 품질과 크기에 따라 다르며, 특히 jpeg의 크기를 최적화합니다.
  • 모든 주석 또는 exif 태그 제거

imagemagick에서

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의 이미지를 얻었습니다. 이제 코드를 시험해 볼 수 있습니다. 고맙게도 도움이되는 -define : extent = MAX_SIZE_IN_KB 옵션을 찾았습니다.
Javis Perez

36
많은 파일을 수행하는 경우에도 할 수 있습니다 mogrify -strip -interlace Plane -gaussian-blur 0.05 -quality 85% *.jpg. 해당 명령을 실행하기 전에 백업이 있는지 확인하십시오. 그 자리에 쓸 것입니다.
Richard Ayotte

3
-strip나를 위해 그것을했다. 감사합니다
Nigel Angel

38
이미지가 매우 흐릿합니다. 공간을 절약하기 위해 의도적으로 이미지를 흐리게하는 것은 비생산적인 것 같습니다. 품질이 낮은 % 만 사용하는 것이 더 합리적이지 않습니까? 품질 변경 프로세스는 공간 절약에있어 상당히 뛰어나면서도 선명한 이미지 품질을 유지합니다. 이미지에 0.05 가우스 블러를 적용하여 공간을 절약했지만 완전히 쓰레기처럼 보였습니다. 사용하여 정착했습니다 mogrify -strip -quality 75% *.jpg. 스트립이 훌륭합니다. 0 품질 손실 및 큰 공간 절약. 그리고 75 %의 품질은 100 %와 거의 차이가 없지만 공간의 절반을 차지합니다.
Buttle Butkus

80
흐림 효과를 싫어하면 대신 -sampling-factor 4 : 2 : 0을 사용하십시오. 이것이하는 일은 눈이 고정되는 휘도 해상도를 망설이지 않고 크로마 채널의 해상도를 절반으로 낮추는 것입니다. 변환의 충실도를 높이려면 -define jpeg : dct-method = float를 지정하여 파일 크기를 늘리지 않고도 약간의 향상을 얻을 수 있습니다. 즉, 기본 빠른 대신보다 정확한 부동 소수점 이산 코사인 변환을 사용하십시오. 정수 버전.
Fordi

67

내가 사용하고 구글 PageSpeed 통계 이미지 최적화 가이드 라인, 그리고 ImageMagick를 위해 그들은 다음을 권장합니다 :

-
샘플링 팩터 4 : 2 : 0- 스트립-
품질 85 [범위가 달라질 수 있습니다. 범위 60-80을 사용합니다. 여기서 낮은 숫자는 작은 파일을 의미합니다]-
인터레이스-
색 공간 RGB

ImageMagick의 명령 :

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

이러한 옵션을 사용하면 눈에 띄는 손실없이 JPEG 크기를 최대 40 % 절약 할 수 있습니다.


16

PHP에서 Imagick 클래스를 사용하는 사람들을 위해

$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 해상도는 최대 360dpi의 품질로 10cm 사진을 개발할 때 가장 좋습니다. 나는 그것을 제거하고 싶지 않습니다.

편집 : 나는 흐릿하게하지 않고 훨씬 더 나은 결과를 얻는 것으로 나타났습니다. 파일을 흐리게 처리하지 않으면 크기가 원본의 50 %이지만 품질은 향상됩니다 (확대시).


"-filter Lanczos"를 추가하지 않아도됩니다. 기본적으로 imagemagick.org/script/command-line-options.php#filter로 설정됩니다
Ilya Prokin

위에서 말한 것처럼-파일 해상도를 낮추기 위해 이미지 해상도를 낮추는 것은 쓸모가 없습니다. 대신 JPEG 품질을 낮추십시오! 직접 테스트 할 수 있습니다-97 % JPEG로 하나의 이미지와 68 %로 변환 된 다른 이미지를 비교하면 100 % 줌을 보더라도 픽셀이 다른 것을 보는 데 어려움을 겪을 것입니다! 재고 카메라와 휴대폰의 설정은 PC에 더 큰 저장 용량과 더 큰 HDD를 가진 새 휴대폰을 구입하고 싶을 정도로 엄청나게 높습니다 ... photo.stackexchange.com/questions/30243/…
McVitas

10

JPG와 PNG를 최소화하기위한 유용한 참고 사항과 일반적인 제안을 추가하겠습니다.

우선, ImageMagick 은 입력 jpeg 압축 레벨을 읽거나 더 나은 "추측" ...을 추가하므로 전혀 추가하지 않으면 -quality NN출력은 입력과 동일한 레벨을 사용해야합니다. 때로는 중요한 기능이 될 수 있습니다. 그렇지 않으면 기본 수준이다 -quality 92(참조 www.imagemagick.org )

제안은 배치 프로세스를위한 정말 멋진 무료 도구 ImageOptim 에 관한 것입니다.
당신은 (특히 무료 사용 후,뿐만 아니라 및 PNG 파일 작은 JPG를 얻을 수 ImageAlpha [되지 일괄 처리] 또는 무료 Pngyu 일괄 처리를 필요로하는 경우).
뿐만 아니라 이러한 도구는 Mac 및 Win 및 Command Line 용 도구입니다 ( Brew 를 사용하여 설치 한 다음 Brew 공식을 검색 하는 것이 좋습니다 ).


Linux에는 pngquant 를 사용 했습니다 . ImageAlpha 페이지에서 참조되었습니다. 힌트 주셔서 감사합니다
Alexander 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-인터레이스 평면-정의 jpeg : dct-method = float -colorspace RGB -gaussian-blur 0.05

0.05에서 가우시안 블러가 없으면 약 261kb 였고 테스트 한 이미지의 경우 약 171KB였습니다. 복잡한 이미지가 큰 1440p 모니터의 시각적 차이는 확대 할 때까지 눈에 띄지 않습니다.


가우시안 블러는 작은 이미지에서는 제대로 작동하지 않지만 큰 이미지에는 필수입니다!
Antonin 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 % 크기 조정은 대부분의 목적으로 이미지를 너무 많이 파괴하지 않습니다.

그레이 스케일 이미지 (PNG에서 변환)에 대해 좋은 결과로 이것을 사용합니다.

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

스캔 한 흑백 페이지에 이것을 사용하여 회색조 이미지로 만듭니다 (추가 인수는 이전 페이지의 그림자를 제거합니다).

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 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.