在ImageMagick中使用Stacks选择性地模糊部分图像

时间:2008-12-18 04:10:11

标签: text imagemagick blur annotate stack

我正试图用一些阴影将一些文本注释到基本图像上。我不喜欢使用-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选项不仅模糊了第一层文本,还模糊了底层基本图像。我只希望第一层文字模糊,而不是基本图像。

我读了一些关于使用堆栈的内容,并尝试使用\( \)围绕该部分隔离第一层文本和模糊命令,如下所示:

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

结果是相同的 - 文本阴影和底层基础图像都变得模糊。我担心我没有太多运气理解堆栈或我应该用什么其他命令来获得我想要的效果。

1 个答案:

答案 0 :(得分:7)

正如经常发生的那样,自从发布问题以来我一直在努力解决这个问题,而且我已经设法自己解决了这个问题。

重要的变化是我开始使用空白透明画布,而不是从基本图像开始。在我得到正确的文本之后,我将基本图像插入到堆栈中,交换堆栈中两个图像的顺序,然后将它们与组合类型的“屏幕”合成,它将另一个放在另一个上面。 / p>

导入的另一个注意事项:需要-channel RGBA,以便模糊与文本图层的透明度结合使用,因为IM工作方式的特殊性。为什么这是必要的解释on this page

此外,在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