gpt4 book ai didi

background - ImageMagick 使用部分透明像素的背景颜色转换为 png8(带有二进制 alpha 的调色板 PNG)

转载 作者:行者123 更新时间:2023-12-02 03:14:05 36 4
gpt4 key购买 nike

我有一个像这样的 32 位 PNG 图像:

32-bit

此处显示棋盘背景以提高可见性,但图像实际上不是棋盘而是透明的(供您引用: the original 32-bit image )。正如您所看到的,在边缘周围和向右,红色像素逐渐从不透明淡出为透明。

如果我在蓝色背景上显示这个 32 位图像,边缘周围和右侧的像素会逐渐从红色褪成蓝色。

现在我需要将此图像转换为带有二进制 alpha 的 8 位 PNG。我希望完全透明的区域保持完全透明,但部分透明的像素逐渐与预期的背景/ mask 颜色混合,在本例中为蓝色。

所以像这样:

8-bit blended with background color

但是,我似乎不知道如何使用 ImageMagick 执行此操作(在 Mac 上使用 ImageMagick 7.0.8-26)。我尝试如下:

magick original.png -background 'rgba(0,0,255,0)' png8:output.png

但这会导致:

8-bit with background color ignored

它似乎完全忽略了蓝色背景颜色,只是将透明度转换为二进制(可能对于 ≥128 采取完全不透明或对于 <128 采取完全透明)。

此外,如果我指定 rgb(0,0,255) 作为背景颜色(即无 Alpha),结果是相同的。

ImageMagick 是否有一些我不知道的智能“部分透明像素的背景混合”选项?

否则,我猜我应该以某种方式提取一个二进制位图,其中原始图像是完全透明的(即具有 alpha 值或不透明度 0),然后将图像展平到我选择的背景上,然后重新应用再次 bool alpha 位图。但不太确定如何做到这一点。

最佳答案

我可以想到两种技术,但我相信人们有更好的答案。

第一个选项

合成蓝色背景,然后从原始源复制 Alpha channel 。

magick original.png \( \
+clone \( +clone -fill BLUE -draw 'color 0,0 reset' \) \
-compose DstOver -composite \) \
-swap 0,1 -compose CopyAlpha -composite PNG8:output.png

output

第二个选项

将透明色替换为蓝色,然后调用 -transparent,而不进行任何 -fuzz 操作。

magick original.png \( \
+clone -fill BLUE -draw 'color 0,0 reset' \) \
-compose DstOver -composite -transparent BLUE \
PNG8:output.png

output

我再次确信上面的例子可以改进。 YMMV

关于background - ImageMagick 使用部分透明像素的背景颜色转换为 png8(带有二进制 alpha 的调色板 PNG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56687653/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com