为什么使用ImageMagick转换的模糊工作与广告一样?

时间:2016-01-18 18:39:11

标签: imagemagick imagemagick-convert

我的问题不是如何模糊图像的一部分,而为什么以下语句正常工作。

convert rose: \( +clone -scale 5%  -scale 2000% \) \
\( +clone -gamma 0 -fill white \
-draw 'rectangle 20,10 40,20' -blur 10x4 \) \
-composite target.png

rose-blurred

到目前为止,我的理解是第一部分

\( +clone -scale 5%  -scale 2000% \)

获取源映像,它最初是堆栈中唯一的映像,然后在堆栈上复制它,然后通过按1/20缩小然后按20/1放大20/1来修改堆栈顶部。因此,堆栈顶部的图像保持与其下方的图像相同的分辨率。

下一个命令

\( +clone -gamma 0 -fill white \
-draw 'rectangle 20,10 40,20' -blur 10x4 \) \

再次复制顶部图像。因此,堆栈上现在有三个图像。将Gamma设置为零的异常值,以确保下一个填充白色的命令将填充1.0,1.0,1.0的纯RGB。 -fill命令实际上没有做任何事情。它只是设置参数。实际绘图操作由-draw命令执行。该命令绘制一个特定的图元(在这种情况下是一个矩形),并用白色填充它。在绘制矩形后应用模糊滤镜。因此,矩形本身不会发生太多事情。使用该过滤器会使图像的其余部分模糊。

接下来我输了。 -composite运算符将覆盖堆栈顶部的图像覆盖堆栈下方的图像。但由于我们在堆栈上有三个图像,因此效果是堆栈底部的图像将被忽略。小心澄清?

我也想学习如何钓鱼而不是提供鱼:man convert指向this页面,但没有任何地方#34;堆叠"出现在该页面上。我应该从哪个参考页面开始理解上面提到的简短convert片段?

1 个答案:

答案 0 :(得分:2)

首先,对于一些“钓鱼课程”,您可以阅读here关于命令行处理和命令顺序等。另外,看看Anthony Thyssen的优秀“使用”页面here

关于你的问题,解释是当堆栈上有三个图像时(正如你所说),第三个图像作为另外两个图像的操作掩码。它解释为here

进一步“钓鱼课程” ...如果您遇到ImageMagick,可以通过多种方式进行调试......

技术1

删除命令的最后一部分(创建输出文件的位,包括最后一个-composite)并将其替换为如下文件名:

convert rose:                          \
  \( +clone -scale 5%  -scale 2000% \) \
  \( +clone -gamma 0 -fill white -draw 'rectangle 20,10 40,20' -blur 10x4 \) \
  temp-%d.png

现在运行它,您将看到堆栈中的所有图像都失败,名为temp-0.pngtemp-1.png等。

技术2

在处理渠道的各个阶段添加中间-writes

convert rose: \( +clone -scale 5%  -scale 2000% -write temp1.png \) \
 \( +clone -gamma 0 -fill white -draw 'rectangle 20,10 40,20' -blur 10x4 -write temp2.png \) \
...