使用 -transparency 替换颜色,无论现有像素不透明度如何,使用 ImageMagick

使用 -transparency 替换颜色,无论现有像素不透明度如何,使用 ImageMagick

我有一张彩色图像,其中有很多现有的透明背景,但还有几块粉红色的块,rgb(255,0,255)我想使其另外变得透明。

我是这样做的:

convert 0001.png -fuzz 15% -fill transparent -transparent "rgb(255,0,255)" result.png

问题是,因为原始图像是抗锯齿的,所以仍然有一个热粉色光晕,它rgba(255,0,255, 50 )与其他部分透明的值不匹配,除非我把它调得-fuzz太高。

所以我想我可以这样解决这个问题:

convert 0001.png -fuzz 15% -fill transparent
-transparent "rgba(255,0,255,0)"
-transparent "rgba(255,0,255,64)"
-transparent "rgba(255,0,255,128)"
-transparent "rgba(255,0,255,192)"
-transparent "rgba(255,0,255,255)"
result.png

...但对不同不透明度级别的额外调用-transparent似乎没有产生任何额外的效果。

这几乎就像在进行匹配之前调用 -transparent 截断我的一样(尽管rgba(255,0,255,128)仍然查看不透明度,但似乎总是从 255 开始,而不是从我传递给的不透明度开始)。rgb(255,0,255)-fuzz-transparent

如何替换颜色的所有示例RGB(255,0,255),而不管像素的预先存在的 alpha ?

这是我正在使用的图像:

在此处输入图片描述

这就是我剩下的,我想删除的:(放大并给出白色背景以便于查看) 在此处输入图片描述

答案1

...但对不同不透明度级别的额外调用-transparent似乎没有产生任何额外的效果。

rgba(R,G,B,A)A0(完全透明)到1(完全不透明),而不是从0255。您的尝试可以像这样修复:

convert 0001.png -fuzz 15% -fill transparent \
-transparent "rgba(255,0,255,0)" \
-transparent "rgba(255,0,255,0.25)" \
-transparent "rgba(255,0,255,0.5)" \
-transparent "rgba(255,0,255,0.75)" \
-transparent "rgba(255,0,255,1)" \
result.png

结果如下:

结果,模糊 15%

我不知道是否最好的解决方案。至少它表明你的多重想法-transparent还不错,只是你得到的不透明度范围不对。

上面的结果并不完美,粉色与其他(不透明)颜色混合后留下了一些粉红色残留。从-fuzz 35%这个方面来看,效果会更好:

结果,模糊 35%

但边缘失去了柔软度。

相关内容