我担心 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 缩小图像并获得令人惊叹的结果。
最佳答案
这对我来说似乎更好,我只是将其大小调整为原始图像的 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 个方法名称,当修复后的结果图像实际上没问题时 setCompression
而不是 setComression
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
这是使用showdev评论的正确方法的图像,将图像大小加倍(121K vs 329K),但对我来说没有太大好处
$im->setImageCompression(Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(100);
关于php - 我的 Imagick 代码似乎从未调整大小,但仍然产生清晰的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151273/