在 Linux 下给图片批量加水印简单多了,用 imagemagick + 一个小脚本搞定。
在 CentOS 下安装:
# yum install ImageMagick
在 Ubuntu 下安装:
$ sudo apt-get install imagemagick
先用画图工具制作好一个水印图片 watermark.jpg,然后执行 composite 命令把这个 watermark.jpg 水印加到图片 vpsee.jpg 上,-dissolve 15 是指 watermark.jpg 使用15%的透明附在原图上:
$ composite -gravity northeast -dissolve 15 watermark.jpg vpsee.jpg vpsee.jpg
要事先做个 watermark.jpg 好麻烦,有没有不用 watermark.jpg 直接加水印的方法?有,不过这种方法需要 Linux 系统上已经安装 True 字体(一般来说服务器都没有安装,不建议为了一个水印安装一个硕大的字体),以下命令把 vpsee.com 字符串加到 image.jpg 图片上:
$ mogrify -font /usr/share/fonts/truetype/thai/Purisa.ttf -pointsize 15 \
-verbose -draw "fill black text 5,23 'vpsee.com' \
fill orange text 6,24 'vpsee.com' " image.jpg
可以用下面的 shell script 对某个目录的所有图片加水印,需要注意的是处理带空白字符的文件名很麻烦,所以下面的脚本先处理空白字符,把包含空白字符的文件名用 “_” 字符替代,比如:image 1.jpg 替换成 image_1.jpg:
#!/bin/bash
echo "Image watermarking Script"
echo "http://www.vpsee.com"
echo ""
if [ $# -ne 2 ]
then
echo "usage: ./watermark watermark.jpg picture_directory"
echo ""
exit
fi
MARK=$1
PICDIR=$2
for each in $PICDIR/*{.jpg,.jpeg,.png,.JPG,.JPEG,PNG}
do
mv "$each" `echo $each | tr ' ' '_'`;
composite -gravity northeast -dissolve 15.3 $MARK $each $each 2> /dev/null
echo "$each: done!"
done
exit 0
imagemagick 的功能很强大,把上面脚本中的 composite 一行换成下面这行就成了批量给图片改大小了:
$ convert -resize 400 old_image.jpg new_image.jpg
如果想直接把原图改小,用新图片覆盖原图片的话:
$ convert -resize 400 image.jpg image.jpg