我正在尝试使用ImageMagick摆脱一堆图像的背景。 ImageMagick网站记录了variety of techniques这样做。他们还方便地编写了一个shell脚本bg_removal.sh,其中包含了这些方法的首选组合。
我在脚本中遇到错误。当您调用脚本时,您会提供一些模糊参数,如果您知道它,还会提供特定的背景颜色。传递明确的背景颜色,如RGB(37,188,111)
,会产生最终命令的这个片段:
( +clone -sparse-color voronoi 0,0,RGB(37,188,111) )
..它工作正常。但是,如果你没有传递bgcolor,那么表达式如下所示:
( +clone -sparse-color voronoi 0,0,%[fx:p{0,0}] )
并且失败并显示-sparse-color
的参数数量错误的消息。我可以将它改为不同的功能,它可以工作:
( +clone -sparse-color voronoi 0,0,%[pixel:p{0,0}] )
我不太了解ImageMagick知道fx
函数正在做什么以及pixel
是否是可接受的替代品。我认为它正在寻找坐标0,0处的颜色以猜测背景颜色,但不完全确定。语法0,0,%[fx:p{0,0}]
是否正确?
答案 0 :(得分:2)
-fx
是一个允许您使用数学或IM特定表达式应用于像素的运算符:-fx 'expression'
。
仅在ImageMagick版本6.2.10及更高版本中引入时,您可以在image properties escaped strings中使用转义序列,例如'%[fx:...]', 用括号括起来的特殊场合。所以这两种方法都应该在v6.2.10之后起作用:
%[fx:expression]
%[pixel:expression]
至于您的问题:是的,'像素 IS 是fx的可接受替代品。
表达式p{0,0}
表示:'返回当前图像'中左上角像素的颜色值。
请检查您的ImageMagick版本:
convert -version
至于为什么由于{{1>}的错误的参数数量而导致整个表达式失败:
检查-sparse-color
支持的方法voronoi
是否属于<{1}}:
-sparse-color
(我认为是 - 否则你可能会看到不同的错误信息。)
convert -list sparse-color
的一般语法记录为:
-sparse-color
这表明你应该使用额外的引号来使稀疏颜色识别正确数量的参数。 <怎么样
-sparse-color method 'x,y color ...'
...
答案 1 :(得分:0)
我遇到了一个问题,即尽管使用了 v7+,我的 fx 表达式也不起作用。我将命令从 convert
更改为 magick
,然后它开始工作。希望这能帮助其他人免于撞墙。