3

我正在尝试使用阴影将一些文本注释到基本图像上。我不喜欢使用 -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

结果是一样的——文本阴影和底层基础图像都变得模糊了。恐怕我没有太多运气理解堆栈或我应该使用哪些其他命令来获得我想要的效果。

4

1 回答 1

7

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

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

另一个重要的注意事项:由于 IM 工作方式的特殊性,需要 -channel 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
于 2008-12-18T14:50:34.833 回答