用透明度替换图像中的颜色

Replace Colors in Image with Transparency

如何使用 ImageMagick 替换包含透明度的图像中的颜色,但之后保留原始图像的透明度。

这对于批量更改图标颜色非常有用。

convert file-in.png -alpha off -fill REPLACEMENT -opaque COLOR file-out.png

然后

convert file-out.png file-in.png -compose CopyOpacity -composite PNG32:file-final.png

更新答案

选项 1

一个更简单的选项可能是这样的:

convert start.png -alpha deactivate -fill blue -opaque red -alpha activate result.png

这改变了这个:

对此:

选项 2

另一个选项,它使用图像的内存副本,也可以避免需要创建 2 个进程并将中间文件写入磁盘:

convert start.png -write MPR:orig     \
   -alpha off -fill blue -opaque red  \
   MPR:orig -compose CopyOpacity -composite result.png

选项 3

另一种方法,使用 clone 而不是 MPR:

convert start.png                                   \
  \( +clone -alpha off -fill blue -opaque red \)    \
  +swap -compose CopyOpacity -composite result.png

原答案

如果我创建一个像这样包含透明度的图像:

convert -size 400x400 xc:none -fill red -draw "rectangle 10,10 100,100" -fill blue -draw "rectangle 200,200 300,300" -bordercolor black -border 5 start.png

我会得到这个(我将它显示在棋盘上只是为了可视化透明度):

如果我现在运行这个

convert start.png -fill yellow -opaque red result.png

我会得到这个(再次覆盖在棋盘上):

不确定为什么您需要一个更复杂的两阶段流程 - 还是我误解了您的问题?