用透明度替换图像中的颜色
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
我会得到这个(再次覆盖在棋盘上):
不确定为什么您需要一个更复杂的两阶段流程 - 还是我误解了您的问题?
如何使用 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
我会得到这个(再次覆盖在棋盘上):
不确定为什么您需要一个更复杂的两阶段流程 - 还是我误解了您的问题?