Imagemagick alpha为零时,调整大小时RGB组件丢失 我使用C++中IMAGEMGEKIG的MaGix++API来缩小RGBA图像的一半大小。 Magick::Image input(input_file); input.flip(); input.resize(Magick::Geometry(image.px_width, image.px_height)); Magick::Blob blob; input.write(&blob, "RGBA"); //input.write("out.png"); // Behaves the same 源图像

Imagemagick alpha为零时,调整大小时RGB组件丢失 我使用C++中IMAGEMGEKIG的MaGix++API来缩小RGBA图像的一半大小。 Magick::Image input(input_file); input.flip(); input.resize(Magick::Geometry(image.px_width, image.px_height)); Magick::Blob blob; input.write(&blob, "RGBA"); //input.write("out.png"); // Behaves the same 源图像,imagemagick,imagemagick-convert,magick++,Imagemagick,Imagemagick Convert,Magick++,原始文件: 透明度为alpha的RGBA: 仅RGB频道: 仅Alpha通道: 请注意三个彩色点和RGB通道,其中alpha通道为零 输出图像 透明度为alpha的RGBA: 仅RGB频道: alpha通道是正确的 三个点消失了。似乎ImageMagick认为,由于点是完全透明的,它可以丢弃信息。问题是,有一些有价值的信息丢失,并破坏了期望这些数据的渲染图像 当我通过convertutil运行图像时,我会得到相同的中断行为: $ convert in.png -resize 512x512 ou

原始文件:

透明度为alpha的RGBA:

仅RGB频道:

仅Alpha通道:

请注意三个彩色点和RGB通道,其中alpha通道为零

输出图像 透明度为alpha的RGBA:

仅RGB频道:

alpha通道是正确的

三个点消失了。似乎ImageMagick认为,由于点是完全透明的,它可以丢弃信息。问题是,有一些有价值的信息丢失,并破坏了期望这些数据的渲染图像

当我通过
convert
util运行图像时,我会得到相同的中断行为:

$ convert in.png -resize 512x512 out.png
我可以用这个命令修复它:

$ convert in.png -channel RGBA -separate -resize 512x512 -combine out.png

如何使用Magick++API实现这种正确的行为?

请发布实际的原始文件。当我从您的链接下载时,该文件没有alpha通道,只显示棋盘格背景。@fmw42我添加了原始文件。我可以复制你的问题。我认为它需要作为一个错误报告在我发布了一个关于这个问题的错误报告。请发布实际的原始文件。当我从您的链接下载时,该文件没有alpha通道,只显示棋盘格背景。@fmw42我添加了原始文件。我可以复制你的问题。我认为它需要作为一个bug报告在我发布了一个关于这个问题的bug报告。