Text 使用ImageMagick中的堆栈选择性地模糊图像的一部分

Text 使用ImageMagick中的堆栈选择性地模糊图像的一部分,text,imagemagick,blur,annotate,stack,Text,Imagemagick,Blur,Annotate,Stack,我试图用dropshadow在基础图像上注释一些文本。我不喜欢使用-shadow选项得到的结果,所以我把文本放下来,模糊它,然后再把文本放回白色,与阴影偏移几个像素。下面是我正在使用的命令: convert base_image.jpg \ -font TT0590M_.ttf \ -fill gray30 \ -annotate +0+0 '' -gravity North \ -annotate +72+32 'ABCDEFGH

我试图用dropshadow在基础图像上注释一些文本。我不喜欢使用-shadow选项得到的结果,所以我把文本放下来,模糊它,然后再把文本放回白色,与阴影偏移几个像素。下面是我正在使用的命令:

convert base_image.jpg \
        -font TT0590M_.ttf \
        -fill gray30 \
        -annotate +0+0 '' -gravity North \
        -annotate +72+32 'ABCDEFGHIJKLM' \
        -blur 0x4 \
        -fill white \
        -annotate +72+27 'ABCDEFGHIJKLM' \
        combined.png
我的问题是-blur选项不仅模糊了第一层文本,还模糊了底层基础图像。我只想模糊第一层文字,而不是基础图像

我读了一些关于使用堆栈的知识,并尝试在该部分周围使用
\(\)
隔离第一层文本和blur命令,如下所示:

convert base_image.jpg \
        -font TT0590M_.ttf \
        -fill gray30 \
        -annotate +0+0 '' -gravity North \
        \( -annotate +72+32 'ABCDEFGHIJKLM' \
        -blur 0x4 \) \
        -fill white \
        -annotate +72+27 'ABCDEFGHIJKLM' \
        combined.png

结果是一样的-文本阴影和基础图像都变得模糊。恐怕我在理解堆栈或者我应该使用哪些其他命令来获得我想要的效果方面运气不太好。

正如经常发生的那样,自从发布问题以来,我一直在努力解决这个问题

重要的变化是,我从一个空白、透明的画布开始,而不是从基础图像开始。在我得到正确的文本后,我将基本图像插入堆栈,交换堆栈中两个图像的顺序,然后将它们合成为“screen”的合成类型,它将一个图像置于另一个图像之上

另一个重要注意事项是:由于IM工作方式的特殊性,需要使用双通道RGBA,以便使模糊与文本层的透明度结合起来工作。解释了为什么这是必要的

此外,在Windows系统(.bat文件而不是shell脚本)上,单引号必须是双引号,反斜杠“\”必须是插入符号“^”,否则会崩溃

以下脚本是最终工作结果(*nix版本):

convert  \
    -size 500x500 xc:transparent \
    -font TT0590M_.ttf \
    -annotate +0+0 '' -gravity North \
    -fill gray30 \
    -annotate +75+35 'ABCDEFGHIJKLMNOPQR\nABCDEFGHIJKLMNOPQR' \
    -channel RGBA \
    -blur 0x4 \
    -fill white \
    -annotate +72+30 'ABCDEFGHIJKLMNOPQR\nABCDEFGHIJKLMNOPQR' \
    -insert 0 base_image.jpg \
    -swap 0,1 \
    -composite -compose screen \
    combined.png