我的问题不是如何模糊图像的一部分,而为什么以下语句正常工作。
convert rose: \( +clone -scale 5% -scale 2000% \) \
\( +clone -gamma 0 -fill white \
-draw 'rectangle 20,10 40,20' -blur 10x4 \) \
-composite target.png
到目前为止,我的理解是第一部分
\( +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
片段?
答案 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.png
,temp-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 \) \
...