動かざることバグの如し

近づきたいよ 君の理想に

PHPのImageMagickでsetCompressionQualityが効かない件

結論

setCompressionQuality ではなく setImageCompressionQuality を使え

経緯

以下のようなPHPのコードでImageMagickで画像を圧縮しようとした。しかし一向に画像サイズが小さくならない。

<?php
$im = new Imagick('test.jpg');
$im-> setCompressionQuality(10);
$im->writeImage('test_1.jpg'); 

おかしいなあ

原因

ドキュメントにちゃんと書いてある

このメソッドは、たとえば Imagick::newPseudoImage などで作った新しい画像に対してだけ使えるものです。
既存の画像に対しては Imagick::setImageCompressionQuality() を使う必要があります。

つまり今回みたいに既存の画像を読み込んで圧縮する場合は setImageCompressionQuality() でないと意味がない

以下だと動く

<?php
$im = new Imagick('test.jpg');
$im->setImageCompressionQuality(10);
$im->writeImage('test_1.jpg'); 

このことは PHP: Imagick::setCompressionQuality - Manual でちゃーんと書いてある。ドキュメントは読もう!、終わり

参考リンク