我想要实现的目标是从网络服务器中提取一个简单的图形,并使用 imagemagick 更改一些颜色,以便我可以进一步使用该图像。
这是 imagemagick 部分:
convert traffic.png -transparent "rgb(240,240,240)" traffic2.png
convert traffic2.png -fill "rgb(200,200,200)" -opaque black traffic2.png
convert traffic2.png -fill "rgb(200,200,200)" -opaque "rgb(0,200,0)" traffic2.png
convert traffic2.png -fill "rgb(200,200,200)" -opaque "rgb(0,130,0)" traffic2.png
convert traffic2.png -fill "rgb(200,200,200)" -opaque "rgb(150,150,255)" traffic2.png
# convert traffic2.png -fill "rgb(200,200,200)" -opaque "rgb(0,0,255)" traffic2.png
我遇到的问题是当前注释掉的行。在我看来,它应该做的是将所有出现的蓝色更改为指定的相同灰色,它也这样做,但是一旦执行此行,以前的透明背景也会变成纯色。看到语法是如何相同的,我真的不知道为什么会发生这种情况。当我在本地计算机 (OS X) 上尝试这些命令时,它工作得很好,但在我的 Raspberry Pi 上的 Debian 下,似乎有些东西妨碍了我。
答案1
我认为您的问题正如我们在您的问题下的评论中所讨论的那样,特别是 IM 6.6.X 和 6.7+ 之间所做的更改。你的命令在 Fedora 14 和 CentOS 5 & 6 上对我有效,但在 Ubuntu 12.10 上无效。
- F14 (6.6.4-1 2011-11-03 Q16) - 有效
- CentOS 6 (6.5.4-7 2012-05-07 Q16) - 有效
- Ubuntu 12.10 (6.7.7-10 2012-08-17 Q16) 不起作用
我在 IM 文档中找到了这一点,标题为:ImageMagick v6 示例 -- 颜色基础知识和通道。这个简介是在“替换图像中的颜色”部分引起我注意的:
然而,从 IM v6.2.7 开始,该运算符受到“-channel”设置的限制。因此,要将颜色(例如蓝色)转换为透明度,您需要指定一个“通道”来包含 Alpha 通道以使颜色透明。您还需要确保图像启用了“遮罩”或 Alpha 通道,以保存透明度信息。
有了这个新信息,我将你的第六个命令转换为:
$ convert traffic2.png -transparent "rgb(0,0,255)" traffic2.png
这似乎已经奏效了。 OP 已确认这解决了他的问题!
旧命令
新命令