imagemagick的convert意外改变了背景颜色

imagemagick的convert意外改变了背景颜色

我想要实现的目标是从网络服务器中提取一个简单的图形,并使用 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 已确认这解决了他的问题!

旧命令

         交通不便的ss2.png

新命令

         良好交通的ss2.png

相关内容