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。
当我做 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。