Сжатие изображений PHP iMagick

Я новичок в iMagick и нашел очень ограниченную документацию по библиотеке PHP. Я с радостью изменяю размеры изображений и записываю их обратно на жесткий диск, но мне не удается полностью сжать изображения, например, с помощью JPG.

Это код, который я использую до сих пор:

function scale_image($size = 200,$extension)
{
    if(!file_exists(ALBUM_PATH . $this->path . $this->filename . $extension))
    {
        $im = new imagick(ALBUM_PATH . $this->path . $this->filename);
        
        $width = $im->getImageWidth();
        $height = $im->getImageHeight();
        if($width > $height)
            $im->resizeImage($size, 0, imagick::FILTER_LANCZOS, 1); 
        else 
            $im->resizeImage(0 , $size, imagick::FILTER_LANCZOS, 1); 
        
        $im->setImageCompression(true);
        $im->setCompression(Imagick::COMPRESSION_JPEG);
        $im->setCompressionQuality(20); 
        
        $im->writeImage(ALBUM_PATH . $this->path . $this->filename . $extension); 
        $im->clear(); 
        $im->destroy(); 
    }
}

person Rob Forrest    schedule 22.12.2009    source источник
comment
Какой вопрос? Вам нужно будет более конкретно определить, что не так с вашим кодом!   -  person André Hoffmann    schedule 25.12.2009


Ответы (3)


Попробуй это:

$im->setImageCompression(Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(20);
person kovshenin    schedule 24.11.2010
comment
Это то, что я использую и отлично работает для меня. По умолчанию установлено качество 87. Я обнаружил, что настройка на 80 лучше подходит для моего типа использования. - person TheCarver; 11.09.2013

setImageCompression, по-видимому, ожидает в качестве параметра целое число, а не логическое значение (см.: http://www.php.net/manual/en/function.imagick-setimagecompression.php).

Я думаю, что сжатие изображений может работать, если вы отключите эту строку:

$im->setImageCompression(true);
person Benjamin Delichere    schedule 30.12.2009
comment
Да. true = 1 и в исходном коде: COMPRESSION_NO = 1; - person German Khokhlov; 30.05.2019

Полный список форматов сжатия из исходного кода:

const COMPRESSION_NO = 1;
const COMPRESSION_BZIP = 2;
const COMPRESSION_FAX = 6;
const COMPRESSION_GROUP4 = 7;
const COMPRESSION_JPEG = 8;
const COMPRESSION_JPEG2000 = 9;
const COMPRESSION_LOSSLESSJPEG = 10;
const COMPRESSION_LZW = 11;
const COMPRESSION_RLE = 12;
const COMPRESSION_ZIP = 13;
const COMPRESSION_DXT1 = 3;
const COMPRESSION_DXT3 = 4;
const COMPRESSION_DXT5 = 5;
const COMPRESSION_ZIPS = 14;
const COMPRESSION_PIZ = 15;
const COMPRESSION_PXR24 = 16;
const COMPRESSION_B44 = 17;
const COMPRESSION_B44A = 18;
const COMPRESSION_LZMA = 19;
const COMPRESSION_JBIG1 = 20;
const COMPRESSION_JBIG2 = 21;

Исходная документация: http://www.imagemagick.org/script/command-line-options.php#compress

person German Khokhlov    schedule 30.05.2019