当我这样做时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 获得相同的结果?
1 回答

扬帆大鱼
TA贡献1799条经验 获得超9个赞
您正在执行两种不同类型的处理。
JPG 不支持透明度。所以你的转换命令只是读取 PNG 输入并保存到 JPG 输出。具有透明度的 Alpha 通道被简单地移除,显示任何图像或颜色数据位于 Alpha 通道的透明部分下方。
在您的 Imagick 代码中,您将 Alpha 通道与默认的白色背景进行了展平。这会在 alpha 通道透明的地方放置白色,然后保存为 JPG。
如果您想要在您的转换命令中使用相同的白色,那么请执行convert image.png -flatten image.jpg
. 如果您希望您的 Imagick 执行与转换相同的操作,请移除展平。读取 input.png 图像并简单地保存为 JPG。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消