如何使用 imagick 保持色彩质量

How to keep color quality with imagick

提问人:Mouke 提问时间:10/24/2023 最后编辑:Mouke 更新时间:10/25/2023 访问量:41

问:

我在 PHP8 中玩弄 Imagick 并面临一些问题。我的第一个目标是在 SVG 中居中显示图片。最后,我将图片放在 svg 的图像标签中,然后将整个 SVG 转换为 PNG 并将该 PNG 放入 PDF 文件中。

在 PDF 中应用图片时,某些 PDF 阅读器(如 Adobe 的)中的颜色有点不对劲,例如“褪色”。在某些阅读器中,例如 PSPDFKit 的 js 查看器,这是正常的。

这就是我的图像应该是什么样子(左边的橙色条是 SVG):

original

当通过imagick时,图片看起来“褪色”了:

washed out image

我的代码,非常基本:

    $imagick->readImageBlob($svg);
    $imagick->setImageFormat('png');
    $png = $imagick->getImageBlob();

我主要尝试看看不透明度/透明度是否是原因,还尝试了其他图像格式(此处看到的其他类型的 PNG)

编辑:问题似乎来自图片生成,因为只是将图片放入PDF中(首先不进行转换)不会影响其质量。PDF 是由另一个我没有移交的程序生成的。

php pdf imagick

评论

0赞 KIKO Software 10/24/2023
我认为这可能是颜色配置文件问题。你的问题有些不清楚。当您将 SVG 转换为 PNG 或 PNG 包含在 PDF 中时,是否会显示色差?换句话说,问题到底出在哪里?如何生成 PDF?
0赞 Mouke 10/25/2023
根据您的评论:)编辑帖子以澄清,将查看这些颜色配置文件。
0赞 Mouke 10/25/2023
似乎是PNG格式的问题。我尝试了JPG和GIF,颜色正常。

答:

0赞 Mouke 10/25/2023 #1

因此,我通过将图片格式切换为jpg而不是png来解决这个问题。考虑到我的用例,我不会受到透明度损失或有损压缩的影响。

所以基本上:

$imagick->readImageBlob($svg);
$imagick->setImageFormat('jpeg');
$png = $imagick->getImageBlob();