如何使用 imagick 调整图像大小 php

How to resize image with imagick php

使用 imagick 命令,我想将图像大小从 2Mb 调整为 200KB,我试过:

convert a.jpg -strip -define jpeg:extent=200k a1.jpg

并且有效。但是我想使用 php 的 imagick 函数来调整 blob 图像的大小。

Php 关于 resizeImage 方法的文档需要宽度和高度。

如何像上面的命令行一样将 blob 图像的大小从 2Mb 调整为 200Kb。

我试过了:

    $imageBlob = file_get_contents('a.jpg');
    $image = new \Imagick();
    $image->readImageBlob($imageBlob);
    $height = $image->getImageHeight();
    $width = $image->getImageWidth();
    $image->resizeImage( $width, $height,  \Imagick::FILTER_LANCZOS, 1 );
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_buffer($finfo, $image->getImageBlob());
    $mime == "image/svg" && $mime.= "+xml";
    $base64 =  "data:$mime;base64," . base64_encode($image->getImageBlob());
    echo "<img src=\"".$base64.'">';die;

但这并没有将大小从 2Mb 减小到 200Kb

我没有对此进行测试,但我相当确定您可以像这样使用 setOption 来设置 JPEG 文件大小的上限:

$imagick->setOption('jpeg:extent', $extent);