我有一张彩色图像,其中有很多现有的透明背景,但还有几块粉红色的块,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)
A
从0
(完全透明)到1
(完全不透明),而不是从0
到255
。您的尝试可以像这样修复:
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
结果如下:
我不知道是否这最好的解决方案。至少它表明你的多重想法-transparent
还不错,只是你得到的不透明度范围不对。
上面的结果并不完美,粉色与其他(不透明)颜色混合后留下了一些粉红色残留。从-fuzz 35%
这个方面来看,效果会更好:
但边缘失去了柔软度。