使用 imagemagick 给图片添加阴影

官方文档:Bluring and Sharpening – IM v6 Examples (imagemagick.org)

我有一张图片,名为 test.jpg 直接放到博客文章里面,效果是这样的

shadow-test

如果加上阴影后,效果是这样的。

convert-add-shadow

看起来效果会好很多,特别是当网页背景是白色,图片背景也是白色时,加了阴影可以让图片更为突出。我使用的是这样一条命令

convert test.jpg \( +clone -background black -shadow 50x20+0+0 \) +swap -background none -layers merge +repage shadow.png

-shadow 后面的 50x20+0+0 指的是:

50:阴影的不透明度

20:阴影模糊度

第一个 +0:代表阴影左右偏移

第二个 +0:代表阴影上下偏移

假如我改为 50x20+10+10,那么得到的图片是这样的

shadow-add10-add10

也就是阴影会往右下方偏移。

现在 -background 用的是 black,也可以改为其它颜色的。

convert shadow-test.jpg \( +clone -background red -shadow 50x20+10+10 \) +swap -background none -layers merge +repage shadow.png

shadow-red

个人感觉用 grey 会比较合适,而且我不喜欢偏移,所以这是我使用的命令。

convert shadow-test.jpg \( +clone -background grey -shadow 70x20+0+0 \) +swap -background none -layers merge +repage shadow.png

shadow-grey-70

在 Mac 上用 zsh 必须得加 \ 转义才行,在 Windows 上面就可以不用。

convert shadow-test.jpg ( +clone -background grey -shadow 70x20+0+0 ) +swap -background none -layers merge +repage shadow.png

我可以把它封装为一个函数,但是输出名字要怎么设置呢?直接在后面加 .png 吗?

也就是 test.jpgtest.jpg.png,这样一般是没问题,不过这样的命名不太好。

另一种思路,在名字后面加 -shadow,也就是变 test-shadow.png

function shadow() {
convert $1" /( +clone -background grey -shadow 70x20+0+0 /) +swap -background none -layers merge +repage "${1%.*}"-shadow.png
}

此时将它封装为一个函数,那么之后如果要给图片加阴影,我可以这样来使用

shadow powersee-test.jpg

就可以得到一张名为 powersee-test-shadow.png 的带阴影图片。