Php 我的Imagick代码似乎从来没有调整过大小,仍然可以生成清晰的图像
我担心Imagick可能不支持锐利的图像大小调整。即使是最好的过滤器也会返回模糊的结果,这些结果在我的微不足道的意见中是不规则的,甚至是可怕的。 这是我能从Imagick获得的最好品质: 可使用以下方法调整大小: 注意到质量上的巨大差异了吗?有谁能提供一个由Imagick制作的清晰图像的例子吗 下面是用于生成第一幅图像的Imagick代码:Php 我的Imagick代码似乎从来没有调整过大小,仍然可以生成清晰的图像,php,image,image-processing,imagick,lossless-compression,Php,Image,Image Processing,Imagick,Lossless Compression,我担心Imagick可能不支持锐利的图像大小调整。即使是最好的过滤器也会返回模糊的结果,这些结果在我的微不足道的意见中是不规则的,甚至是可怕的。 这是我能从Imagick获得的最好品质: 可使用以下方法调整大小: 注意到质量上的巨大差异了吗?有谁能提供一个由Imagick制作的清晰图像的例子吗 下面是用于生成第一幅图像的Imagick代码: function imgSize($imagePath,$imageName,$imageExt,$width,$height,$copy) {
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个方法名,当修复的结果图像实际上是OKsetCompression
notsetCompression
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
下面是showdev评论的具有正确方法的图像,图像大小是原来的两倍(121K对329K),但对我来说并没有多大好处
$im->setImageCompression(Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(100);
在指责Imagick在这里犯错之前,您确定您对图像纵横比的计算是正确的吗?@Mr.Concolato如果有问题,我看不出来。上面提供的代码似乎符合互联网上其他人使用的标准。我非常愿意接受这个问题是我自己的。事实上,我更愿意这样做,以便我能更快地修复此问题。:)很公平。只是检查一下。:)我们可以有一个链接到更大的图片,GD更好吗?这可能会有帮助:有趣。我相信TimThumbs使用GD。如果你不介意我问你的GD代码是什么?我明白了。我相信我会为GD重写这个,因为它似乎比Imagick产生更好的结果。然而,我不会将此标记为答案,因为它没有直接解决Imagick,但确实在GD v中提出了一个令人信服的案例。伊玛吉克辩论。似乎Imagick在最重要的一个类别——质量方面存在缺陷。你读过showdev的评论吗?您使用的函数不正确。同时检查@onetrickpony确认使用
setImageCompression
文件大小加倍(121K vs 329K)虽然我看不到图像质量的差异,但将编辑帖子以添加第二个版本。这可能是因为您正在调用cropThumbnailImage(),这也可能会缩放图像。如果您自己正在调整大小,请使用cropImage()