我试图用一些阴影将一些文本注释到基本图像上.我不喜欢使用-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
结果是相同的 - 文本阴影和底层基础图像都变得模糊.我恐怕我没有太多的运气理解堆栈或我应该使用什么其他命令来获得我所追求的效果.
正如经常发生的那样,自从发布问题以来我一直在努力解决这个问题,并且我已经设法自己解决了这个问题.
重要的变化是我开始使用空白透明画布而不是从基本图像开始.在我得到正确的文本之后,我将基本图像插入到堆栈中,交换堆栈中两个图像的顺序,然后将它们与组合类型的"屏幕"合成,这使得一个在另一个上方.
另一个导入注意事项:需要-channel RGBA,以便模糊与文本图层的透明度结合使用,因为IM工作方式的特殊性.为什么这是必要的在本页解释.
此外,在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