霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

Linux 下给图片批量加水印

在 Linux 下给图片批量加水印用 imagemagick 就可以搞定。

在 CentOS 下安装:

# yum install ImageMagick

在 Ubuntu 下安装:

$ sudo apt-get install imagemagick

先用画图工具制作好一个水印图片 watermark.jpg,然后执行 composite 命令把这个 watermark.jpg 水印加到图片 123.jpg 上,-gravity northeast 是指东北方向,即右上角,-dissolve 15 是指 watermark.jpg 使用15%的透明附在原图上:

$ composite -gravity northeast -dissolve 15 watermark.jpg 123.jpg 123.jpg

要事先做个 watermark.jpg 好麻烦,有没有不用 watermark.jpg 直接加水印的方法?有,不过这种方法需要 Linux 系统上已经安装 True 字体(一般来说服务器都没有安装,不建议为了一个水印安装一个硕大的字体),以下命令把 dili360.com 字符串加到 image.jpg 图片上:

$ mogrify -font /usr/share/fonts/truetype/thai/Purisa.ttf -pointsize 15 \
-verbose -draw "fill black text 5,23 'dili360.com' \
fill orange text 6,24 'dili360.com' " image.jpg
实践中用到的脚本:
#!/bin/bash
for each in ./*{.jpg,.jpeg,.JPG,.JPEG,.gif} //可以设定图片目录和图片格式
do
s = `du -k $each | awk '{print $1}'`
//以下代码判断图片文件大小,小于10K的不加水印
if [$s -gt 10]
then
   composite -gravity southeast -dissolve 85 watermark.jpg $each $each 2>/dev/null
   echo "$each: done!" //加水印
fi
done
exit 0
imagemagick 的功能很强大,把上面脚本中的 composite 一行换成下面这行就成了批量给图片改大小了:
$ convert -resize 400 old_image.jpg new_image.jpg

如果想直接把原图改小,用新图片覆盖原图片的话:

$ convert -resize 400 image.jpg image.jpg