PHP iMagick сжатие изображений - PullRequest
4 голосов
/ 22 декабря 2009

Я довольно новичок в 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(); 
    }
}

Любая помощь будет принята с благодарностью.

Большое спасибо

Rob

Ответы [ 3 ]

9 голосов
/ 25 ноября 2010

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

$im->setImageCompression(Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(20);
3 голосов
/ 30 декабря 2009

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

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

$im->setImageCompression(true);
0 голосов
/ 30 мая 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

...