2

我担心 Imagick 可能不支持清晰的图像大小调整。即使是最好的过滤器也会返回低于标准的模糊结果,在我看来甚至是可怕的。

这是我能从 Imagick 中获得的最佳品质: 想象一下

这是使用TimThumbs调整大小的: 蒂姆大拇指

注意到巨大的质量差异了吗?谁能提供一个由 Imagick 产生的清晰图像的例子?

下面是用于生成第一张图片的 Imagick 代码:

function imgSize($imagePath,$imageName,$imageExt,$width,$height,$copy) {
    $file = "img/".$imageName."-".$width."x".$height.".".$imageExt;
    if (!file_exists($file)) {
        try {
                $image = $imagePath;
                $im = new Imagick();
                $im->pingImage($image);
                $im->readImage($image);
                $im->setImageFormat($imageExt);
                //$im->thumbnailImage($width,$height,true);
                $im->cropThumbnailImage($width,$height);
                $im->resizeImage($width,$height,Imagick::FILTER_LANCZOS,0,false);
                $im->cropThumbnailImage($width,$height);
                if ($imageExt=("jpg"||"JPG")) {
                    $img->setComression(Imagick::COMPRESSION_JPEG);
                    $img->setComressionQuality(100);
                }
                if (!$copy==null) {
                    $draw = new ImagickDraw();
                    $draw->setFont("fpdf/font/Montserrat-Regular.ttf");
                    $draw->setFontSize(35);
                    $draw->setFillColor("Gray");
                    $draw->setFillAlpha(0.5);
                    $draw->setGravity(Imagick::INTERPOLATE_AVERAGE);
                    $im->annotateImage($draw,0,0,-45,$copy);
                }
                $im->writeImage("img/".$imageName."-".$width."x".$height.".".$imageExt);
                $im->destroy();
                return "img/".$imageName."-".$width."x".$height.".".$imageExt;
        }
        catch(Exception $e) { echo $e->getMessage(); }
    }
};

我知道有类似的问题,但是对于这个图像质量问题还没有足够的答案。解决 Imagick 图像质量问题的大多数尝试都是将问题简化为“这就是缩小图像时得到的结果”。但是我在这篇文章中提供的 TimThumbs 图像示例反驳了这个假设。您可以使用 PHP 缩小图像并获得惊人的结果。

4

1 回答 1

3

这对我来说似乎更好,我只是将其调整为原始图像的 20%。使用 GD 和 100% 质量作为 JPEG

function resizeImg($filename, $percent, $saveTo) {

    list($width, $height) = getimagesize($filename);
    $newwidth = $width * $percent;
    $newheight = $height * $percent;

    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filename);

    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($thumb, $saveTo, 100);
    imagedestroy($thumb);
}

resizeImg('image.jpg', 0.2, 'image02.jpg');

广东

我已经编译了 php55-imagick 扩展来检查你的代码,首先你拼错了 2 个方法名称,当修复结果图像实际上是可以setCompressionsetComression

$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);

想象一下

这是showdev评论的正确方法的图像,图像大小加倍(121K vs 329K),但对我来说没有多大好处

$im->setImageCompression(Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(100);

想象一下使用 setImageCompression

于 2014-10-01T22:28:26.103 回答