[ImageMagick 学习] ImageMagick 命令的中间操作结果

曾经有这样的困惑:

ImageMagick 的命令,如convert命令,如果相继多次使用,并且前一次的输出是后一次的输入,并且不通过文件的方式,该怎么做?


看了Fred's ImageMagick Scripts 的一些图像特效的说明,如TEXTCLEANER,答案是这样的:

TEXTCLEANER 页面最后的文字提到,这个脚本等价于下面的命令

convert \( $infile -colorspace gray -type grayscale -contrast-stretch 0 \) \
\( -clone 0 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 \) \
-compose copy_opacity -composite -fill "$bgcolor" -opaque none +matte \
-deskew 40% -sharpen 0x1 $outfile
事实上,这里的convert 命令操作了下面两个输入对象:

\( $infile -colorspace gray -type grayscale -contrast-stretch 0 \)

\( -clone 0 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 \)

操作的参数是:

-compose copy_opacity -composite -fill "$bgcolor" -opaque none +matte -deskew 40% -sharpen 0x1

输出是:

$outfile

输入的两个对象,第一个是对输入文件 $infile 做了 -colorspace gray -type grayscale -contrast-stretch 0 操作的结果;第二个是 对输入文件clone 过的对象做了 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 操作的结果。这两个操作结果都是中间计算结果,最终的输出是 $outfile。

这个脚本的等价物告诉我们,ImageMagick 的命令,如convert,是可以有非文件形式的中间变量的,它是通过左右括号,"(" 和")"来实现的。ImageMagick 的wand/convert.c 也印证了这一点:ImageMagick 根据判断convert 命令参数中的左括号做“入栈”操作,根据右括号来做“出栈”操作的,同一个对象的多个副本,是通过 -clone 参数来实现的


下面再给一个例子,它结合了 TEXTCLEANER 和 2COLORTHRESH 二者的功能:对mf-samll.jpg 消除背景噪音,文字旋转至水平,然后再做二值化,最终保存为mf-small-out.gif

convert \( \( mf-small.jpg -colorspace gray -type grayscale -contrast-stretch 0 \) \
\( -clone 0 -colorspace gray -negate -lat 25x25+10% -contrast-stretch 0 \) \
-compose copy_opacity -composite -fill "white" -opaque none +matte -deskew 40% -sharpen 0x1 \) \
+dither -colors 2 -colorspace gray -contrast-stretch 0 mf-small-out.gif

TEXTCLEANER 脚本等价命令行供参考:

convert \( $infile -colorspace gray -type grayscale -contrast-stretch 0 \) \
\( -clone 0 -colorspace gray -negate -lat ${filtersize}x${filtersize}+${offset}% -contrast-stretch 0 \) \
-compose copy_opacity -composite -fill "$bgcolor" -opaque none +matte \
-deskew 40% -sharpen 0x1 $outfile

2COLORTHRESH 脚本等价命令行供参考:

convert $infile +dither -colors 2 -colorspace gray -contrast-stretch 0 $outfile

注意:

命令行中的"\(" 和 "\)" 前后都要有空格,否则ImageMagick 命令不认!


你可能感兴趣的:([ImageMagick 学习] ImageMagick 命令的中间操作结果)