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

Jam*_*rey 4 imagemagick image-processing

我有一个彩色图像,其中有很多现有的透明背景,但也有一些rgb(255,0,255)我想另外变得透明的亮粉色块。

我这样做是这样的:

convert 0001.png -fuzz 15% -fill transparent -transparent "rgb(255,0,255)" result.png
Run Code Online (Sandbox Code Playgroud)

问题是,因为原始图像是抗锯齿的,所以仍然有一个亮粉色光晕,它与例如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
Run Code Online (Sandbox Code Playgroud)

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

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

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

这是我正在使用的图像:

在此输入图像描述

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

Kam*_*ski 5

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

中的rgba(R,G,B,A)Afrom (0完全透明) to 1(完全不透明),而不是 from 0to 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
Run Code Online (Sandbox Code Playgroud)

这是结果:

结果,模糊 15%

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

上面的结果并不完美,有一些粉红色的残留物,其中粉红色与其他(不透明)颜色混合。它-fuzz 35%在这方面看起来更好:

结果,模糊 35%

但边缘失去了柔软度。