PHP - 使用 Imagick 将所有图像转换为 jpg - 质量差
PHP - convert all images to jpg using Imagick - bad quality
我从这个网站上找到了更多关于 Imagick 质量的主题,但没有任何帮助...
我必须将所有图像保存为 JPG。我创建了这个脚本:
$image_url = 'http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png';
$image_code = file_get_contents($image_url);
$img = new Imagick();
$img -> readImageBlob($image_code);
$img->setResolution(300, 300);
$d = $img->getImageGeometry();
$img->cropImage($d['width'],($d['height']-120), 0,0);
$img->setImageFormat('jpeg');
$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setCompressionQuality(100);
$img->writeImage('read.jpg');
$img->clear();
echo '<img src="read.jpg?'.time().'">';exit;
这是原图:http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png
这是由我的脚本转换的图像:http://s5.ifotos.pl/img/demo1jpg_saeaxqx.jpg
哪里有问题?为什么这个图片总是转换成低质量?
谢谢。
图像不在 "bad quality" 中(未发现模糊区域),但两张图像之间的差异是由透明 PNG 到 JPG 转换造成的。
在裁剪图像之前,添加这两行:
// set background to white (Imagick doesn't know how to deal with transparent background if you don't instruct it)
$img->setImageBackgroundColor(new ImagickPixel('white'));
// flattens multiple layers
$img = $img->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
我从这个网站上找到了更多关于 Imagick 质量的主题,但没有任何帮助... 我必须将所有图像保存为 JPG。我创建了这个脚本:
$image_url = 'http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png';
$image_code = file_get_contents($image_url);
$img = new Imagick();
$img -> readImageBlob($image_code);
$img->setResolution(300, 300);
$d = $img->getImageGeometry();
$img->cropImage($d['width'],($d['height']-120), 0,0);
$img->setImageFormat('jpeg');
$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setCompressionQuality(100);
$img->writeImage('read.jpg');
$img->clear();
echo '<img src="read.jpg?'.time().'">';exit;
这是原图:http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png 这是由我的脚本转换的图像:http://s5.ifotos.pl/img/demo1jpg_saeaxqx.jpg
哪里有问题?为什么这个图片总是转换成低质量?
谢谢。
图像不在 "bad quality" 中(未发现模糊区域),但两张图像之间的差异是由透明 PNG 到 JPG 转换造成的。
在裁剪图像之前,添加这两行:
// set background to white (Imagick doesn't know how to deal with transparent background if you don't instruct it)
$img->setImageBackgroundColor(new ImagickPixel('white'));
// flattens multiple layers
$img = $img->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);