Кажется, мой код Imagick никогда не изменяет размер и все еще производит четкое изображение

Боюсь, что Imagick может не поддерживать резкое изменение размера изображения. Даже самые лучшие фильтры дают размытые результаты, которые не соответствуют требованиям, даже ужасные, на мой взгляд.

Это лучшее качество, которое я могу получить от Imagick:
Imagick

Это изменено с помощью TimThumbs:
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.

1

Решение

Это кажется мне лучше, я просто изменил его размер на 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');

GD

Я скомпилировал расширение php55-imagick для проверки вашего кода, во-первых, вы ошиблись в названии 2 методов, когда исправлено, результирующее изображение на самом деле в порядке setCompression не setComression

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

Imagick

Вот изображение с правильными методами, как прокомментировал showdev, удвоив размер изображения (121K против 329K), но для меня это не сильно

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

Imagick с использованием setImageCompression

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]