黄聪:利用ImageMagicK给图片加水印

时间:2022-10-09 20:14:24

1 图片水印处理

假设把名为logo.gif的水印图标添加在原始图片(src.jpg)右下角,且水印的下边缘距原始图片10像素、右边缘距原始图片5像素。使用如下命令即可:

 
convert src.jpg logo.gif -gravity southeast -geometry +5+10 -composite dest.jpg

-gravity southeast 指叠加位置为右下角

如果要求在正中间,参数为center

如果要求在垂直据顶部、水平居中(正北方向),参数为north

 

imagemagick官网:http://www.imagemagick.org/script/composite.php

2 文字水印处理

如果不含中文字符,可以直接通过convert draw text的方式将文字添加到图片,否则就需要使用其它的办法。命令行中不能包括中文字符,但是能通过读取文件的方式来操作,即先把中文信息保存文本文件中。注意:文本文件的编码最好用UTF-8,同时也需要选取一个支持中文的字体。直接把文本文本中的信息输出到图片上使用命令mogrify,不过也可以使用convert命令把文本文件中的信息生成一个图片,然后再把图片合成到原始图片中。下面分别介绍这几种方法。

  • 不含中文字符:例如把www.cnblogs.com作为水印加上图片上,命令如下
  •  convert src.jpg -gravity southeast -fill black -pointsize 16 -draw "text 5,5 'http://www.cnblogs.com/dying'" dest-c.jpg

    mogrify -pointsize 16 -fill black -weight bolder -gravity southeast -annotate +5+5 "http://www.cnblogs.com/dying" src.jpg

    说明:上述两条命令达到同样的结果,但是第一次命令可以保留原始图片,第二条是直接在原始图片上打上水印。

  • 存在中文的情况:假设存有信息的文件叫t.txt,字体文件是msyh.ttf
  • 黄聪:利用ImageMagicK给图片加水印
    方法1:
    //把文件t.txt中的信息生成图片txt.png, -transparent white让图片的背景透明,-size x30设置图片的高度,-pointsize设置字体大小,-font设置字体
    convert -transparent white -font msyh.ttf -fill black -pointsize 24 label:@t.txt txt.png
    //把txt.png合成到src.jpg上
    convert src.jpg txt.png -gravity southeast -geometry +10+5 -composite dest.jpg

    方法2:
    convert src.jpg -transparent white -font msyh.ttf -fill black -pointsize 24 -size x30 label:@t.txt -gravity southeast -geometry +10+5 -composite dest.jpg
    //southeast 图片的东南方向 上北下南左西右东
    方法3:
    mogrify -font msyh.ttf -pointsize 24 -fill white -weight bolder -gravity southeast -annotate +20+20 @"t.txt" src.jpg
    黄聪:利用ImageMagicK给图片加水印

    说明:上述第一、二种方法都有瑕疵,第二种背景不能变成透明,第一种虽然生成的图片可以透明,但是合成到原始图上效果不是很理想,第三种是完全透明的,所以推进用第三种方式来操作。

    我个人以为上面的方法3对gif添加中文水印非常的好用,推荐这个,不过一定要对原图像进行备份,另外一篇文章:ubuntu动态截图,制作GIF动画   。