为什么使用 ImageMagick convert 进行模糊处理会像宣传的那样工作?
Why does blurring using ImageMagick's convert work as advertised?
我的问题不是如何模糊图像的一部分,而是为什么以下语句正确工作。
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 的顺序修改堆栈顶部。因此,堆栈顶部的图像与其下方的图像保持相同的分辨率。
下一个命令
\( +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 页面,但 "stack" 没有出现在该页面上。我应该从哪个参考页开始理解上面的简短 convert
片段?
首先,对于一些 "fishing lessons" 你可以阅读 here about command-line processing and order of commands etc. Also, have a look at Anthony Thyssen's excellent "Usage" pages here.
关于你的问题,解释是当栈上有三张图片时(你说的没错),第三张作为另外两张操作的掩码。解释 here.
进一步"fishing lesson"...如果您被ImageMagick困住了,您可以通过多种方式调试它...
技术一
删除命令的最后部分(创建输出文件的位,包括最后 -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
等
技巧二
在处理管道的各个阶段添加中间体 -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 \) \
...
我的问题不是如何模糊图像的一部分,而是为什么以下语句正确工作。
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 的顺序修改堆栈顶部。因此,堆栈顶部的图像与其下方的图像保持相同的分辨率。
下一个命令
\( +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 页面,但 "stack" 没有出现在该页面上。我应该从哪个参考页开始理解上面的简短 convert
片段?
首先,对于一些 "fishing lessons" 你可以阅读 here about command-line processing and order of commands etc. Also, have a look at Anthony Thyssen's excellent "Usage" pages here.
关于你的问题,解释是当栈上有三张图片时(你说的没错),第三张作为另外两张操作的掩码。解释 here.
进一步"fishing lesson"...如果您被ImageMagick困住了,您可以通过多种方式调试它...
技术一
删除命令的最后部分(创建输出文件的位,包括最后 -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
等
技巧二
在处理管道的各个阶段添加中间体 -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 \) \
...