想象一下PHP问题 - 在“mergeImageLayers”操作之后,.png或.jpeg的质量损失很大

时间:2017-08-06 18:22:21

标签: php imagemagick imagick

我目前正面临与ImageMagick进行“mergeImageLayers”操作后的图像质量问题。我合并了三个单独的.png图片,每个图片最初都是22KB,看起来很好。在“merging-prozess”之后,我得到了质量差的5KB图片,如.png或.jpeg。

如何构建压缩方法以确保更高质量?目前,图像几乎无法使用。这是我构建的功能(它也进行颜色替换):

    function mergeImages($BASE,$MASK,$TEXT,$TARGET,$FILL,$FUZZ){

    $layerMethodType = \Imagick::LAYERMETHOD_COMPARECLEAR;
    $img1 = new Imagick(realpath($BASE));

    $img1->floodFillPaintImage($FILL, $FUZZ* \Imagick::getQuantum(),$TARGET,0,0, true);
    $fuzz = $FUZZ* $img1->getQuantumRange()['quantumRangeLong'];
    $img1->opaquePaintImage($TARGET, $FILL, $fuzz, false, Imagick::CHANNEL_DEFAULT);

    $img2 = new Imagick(realpath($MASK));
    $img1->addImage($img2);
    $img1->setImageFormat('png');

    $img3 = new Imagick(realpath($TEXT));
    $img3->floodFillPaintImage($FILL, $FUZZ* \Imagick::getQuantum(),$TARGET,0,0, true);
    $fuzz = $FUZZ* $img1->getQuantumRange()['quantumRangeLong'];
    $img3->opaquePaintImage($TARGET, $FILL, $fuzz, false, Imagick::CHANNEL_DEFAULT);
    $img1->addImage($img3);
    $img1->setImageFormat('jpeg');
    $result = $img1->mergeImageLayers($layerMethodType);

    header("Content-Type: image/jpeg");
    $result->getImageBlob();
    return $result;
}

希望有人可以帮我解决这个问题。我已经尝试了以下内容:

$img1->setImageFormat('jpeg');
$img1->setImageCompression(\Imagick::COMPRESSION_NO );

$img->setCompression(Imagick::COMPRESSION_JPEG); 
$img->setCompressionQuality(90); 

作为.jpeg或.png在所有情况下新图像都有5KB

Thx提前为您提供帮助!

更新

我尝试了不同的图像,KB很明显地上升了。简单的图片,如图标,一个playicon为instatance简单看起来不好。另一边的照片压缩得很好,质量很好。但“压缩问题”仍然存在 - >上面提到的解决方案简单不起作用。现在我必须做“compress_image()”workarround。

0 个答案:

没有答案