Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-使用Imagick将所有图像转换为jpg-质量差_Php_Imagick - Fatal编程技术网

PHP-使用Imagick将所有图像转换为jpg-质量差

PHP-使用Imagick将所有图像转换为jpg-质量差,php,imagick,Php,Imagick,我在这个网站上找到了更多关于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

我在这个网站上找到了更多关于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;
$image\u url='0http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png';
$image\u code=file\u get\u contents($image\u url);
$img=新的Imagick();
$img->readImageBlob($image\u代码);
$img->setResolution(300300);
$d=$img->getImageGeometry();
$img->cropImage($d['width'],($d['height']-120),0,0);
$img->setImageFormat('jpeg');
$img->setImageCompression(imagick::COMPRESSION\u JPEG);
$img->设置压缩质量(100);
$img->writeImage('read.jpg');
$img->clear();
回声';出口
这是原始图像: 下面是我的脚本转换的图像:

哪里有问题?为什么此图像总是转换为质量差的图像

谢谢。

图像质量不是很差(没有发现模糊区域),但两张图像之间的差异是由透明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);
图像没有“质量差”(没有发现模糊区域),但两幅图像之间的差异是由透明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);

图像质量不是很差(没有发现模糊区域),但两幅图像之间的差异是由透明PNG到JPG的转换造成的。那么如何将此图像保存为JPG,并包含所有影响(模糊区域等)?我必须将所有格式的图像保存到JPG,这些图像看起来应该与原始图像相同:/png转换为JPG时,原始图像的背景仍然存在,只是不再隐藏。因此,如果你愿意,首先在图像编辑器中检查png文件cs photoshop是好的,检查图像的图层,然后裁剪出汽车。这比将其保存为jpg并直接上传更有意义。图像的可能副本并不是“质量差”(没有发现模糊区域),但两幅图像之间的差异是由透明PNG到jpg转换引起的。那么如何将此图像保存为jpg并具有所有效果(模糊区域等)?我必须将所有格式的图像保存到JPG,这些图像看起来应该与原始图像相同:/png转换为JPG时,原始图像的背景仍然存在,只是不再隐藏。因此,如果你愿意,首先在图像编辑器中检查png文件cs photoshop是好的,检查图像的图层,然后裁剪出汽车。这比把它保存为jpg然后直接上传没有意义。可能是“很高兴它能帮你”的复制品。我现在可以诚实地吻你:)好吧,也许有点夸张。。。经过数小时的挣扎,终于找到了答案。虽然我知道flatternimages()将返回一个新对象,但
mergeImageLayers
的文档并没有指定这一点,所以我花了很长时间才发现这一点。我希望我能给你更多的选票!很高兴这对你有帮助。我现在可以诚实地吻你:)好吧,也许有点夸张。。。经过数小时的挣扎,终于找到了答案。虽然我知道flatternimages()将返回一个新对象,但
mergeImageLayers
的文档并没有指定这一点,所以我花了很长时间才发现这一点。我希望我能给你更多的选票!