imagemagick - 当 alpha 为零时,RGB 分量在调整大小时丢失
问题描述
我在 C++ 中使用 ImageMagick 的 Magick++ 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
源图像
原始文件:https ://i.stack.imgur.com/BoYyH.png
以 alpha 为透明度的 RGBA:https ://i.stack.imgur.com/MuGQm.png
仅 RGB 通道:https ://i.imgur.com/1ZRp2K9.png
单独的 Alpha 通道:https ://i.imgur.com/gpjTxVJ.png
注意三个彩色点和 Alpha 通道为零的 RGB 通道。
输出图像
以 alpha 为透明度的 RGBA:https ://i.imgur.com/V9aF6S5.png
仅 RGB 通道:https ://i.imgur.com/ERIbiMS.png
Alpha 通道是正确的。
三个点消失了。似乎 ImageMagick 认为由于点是完全透明的,它可以丢弃信息。问题是,有价值的信息会丢失并破坏期望这些数据的渲染图像。
当我通过convert
util 运行图像时,我得到了同样的破坏行为:
$ convert in.png -resize 512x512 out.png
我能够用这个命令修复它:
$ convert in.png -channel RGBA -separate -resize 512x512 -combine out.png
如何使用 Magick++ API 实现这种正确的行为?
解决方案
推荐阅读
- reactjs - 使用 keyExtractor,仍然收到我的物品没有钥匙的警告
- java - 如何使用 Java 与 Eclipse 和 Maven 创建 Azure Web 作业?
- html - 在 NodeJS 中更改页面标题
- electron - 如何减小 Electron 应用程序的大小?
- java - IntelliJ:如何设置默认工作目录?
- python - 代码跳过 print() 函数并直接中断
- python - 使用美丽的汤 4 无法在亚马逊页面上找到元素
- javascript - 我如何打开一个
- jestjs - jest-dom : toBeVisible() 在应该返回 false 时返回 true
- javascript - Javascript 不受欢迎的在不同功能之间共享变量