doujindou4356
2016-05-23 08:56
浏览 467
已采纳

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

I found more topics from this web site about quality with Imagick but nothing help me... I have to save all images as JPG. I created this script:

$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;

Here is original image: http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png and here is image which was converted by my script: http://s5.ifotos.pl/img/demo1jpg_saeaxqx.jpg

Where is a problem? Why this image is always convert in bad quality?

Thanks.

图片转代码服务由CSDN问答提供 功能建议

我从这个网站上找到了更多关于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  - &gt;  readImageBlob($ image_code); 
 $ img-&gt; setResolution(300,300); 
 $ d = $ img-&gt; getImageGeometry();  
 $ img-&gt; cropImage($ d ['width'],($ d ['height']  -  120),0,0); 
 $ img-&gt; setImageFormat('jpeg'); 
  $ img-&GT; setImageCompression(imagick :: COMPRESSION_JPEG);  
 $的img-&GT; setCompressionQuality(100);  
 $ img-&gt; writeImage('read.jpg'); 
 $ img-&gt; clear(); 
 
echo'&lt; img src =“read.jpg?'。time()。'”  &gt;';退出; 
   
 
 

这是原始图片: http://limuzynamercedes.pl/wp-content/uploads/2014/06/3.png 这里是由我的脚本转换的图像: http://s5.ifotos.pl/img/demo1jpg_saeaxqx.jpg

问题出在哪里? 为什么这个图像总是转换质量差?

谢谢。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dsfsdfsd34324 2016-05-23 09:03
    已采纳

    The image is not in "bad quality" (there is no blurry areas found), but the difference between 2 images is caused by transparent PNG to JPG conversion.

    Before you crop the image, add these two lines:

    // 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);
    
    点赞 打赏 评论

相关推荐 更多相似问题