Imagemagick(转换)控制台与 php Imagick - 不同的结果

Imagemagick (convert) console vs php Imagick - different results

当我做 convert 1.png 1.jpg - 我从 png 中删除了透明,并在 jpg 中看到了真实的背景, 但是当我在 php Imagick 中做同样的事情时:

    $piece = new Imagick("1.png");
    $piece->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
    $piece->setImageFormat('jpg'); // How to refresh content of $piece w/o save to disk?
    $piece->writeImage('image.jpg'); // it works as I need - when reopen saved image

我得到的只是白色背景,与第一张图片一样透明(但首先它是透明的)。

如何使用 Imagick 获得相同的结果?

您正在进行两种不同类型的处理。

JPG 不支持透明度。所以您的转换命令只是读取 PNG 输入并保存为 JPG 输出。具有透明度的 alpha 通道被简单地删除,显示 alpha 通道透明部分下的任何图像或颜色数据。

在您的 Imagick 代码中,您将针对默认的白色背景展平 alpha 通道。这会将白色放在 alpha 通道透明的位置,然后保存为 JPG。

如果您想要在转换命令中使用相同的白色,请执行 convert image.png -flatten image.jpg。如果您希望您的 Imagick 与您的转换执行相同的操作,请删除扁平化。阅读 input.png 图片并简单地保存为 JPG。