最近要用ImageMagick做个水印效果,先做一个简单版本,往图片里添加文字注释
安装ImageMagick和ghostscript(不装会报错:shcommand not found)
如果是linux — CentOS的系统,只需要yum install ghostscript,yum install imagemagick即可
当然,下载源码包安装很可以,而且可以安装最新版,例如ImageMagick已经6.3.9-6了
装完在命令行下convert —version看看其版本,并且验证是否安装成功,然后取张图片试试效果:
convert -rotate 90 xxx.jpg out.jpg
是不是旋转了?
往图片上输入文字:
convert -font helvetica -fill white -pointsize 13 \
-draw 'text 5,195 "Floriade 2002, Canberra, Australia"' \
floriade.jpg comment.jpg
意思是用helvetica字体,white颜色,13字体大小,在图片的width5,height195初开始写上双引号中的句子。
如果要写在正中心呢?有选项gravity,设置为Center就是正中心啦,设为SouthWest就是左下角,非常方便。
以上是命令行,安装了Perl的Image::Magick模块之后,就可以用Perl来调用ImageMagick了,然后问题就是:如何写入中文?ImageMagick只支持utf8编码这是文档上就写明的,不过我测试如下代码:
#!/usr/bin/perl -w
use strict;
use Image::Magick;
use Image::Size;
my $src_path = "tutu.jpg";
my $store_path = "tutu_comment.jpg";
my ($width,$height) = imgsize($src_path);
my $pointsize = int($height * 0.07);
my $text = '中文在此!';
my $rh_annotate = {
text => $text,
style => 'Normal',
pointsize => $pointsize,
fill => 'white',
gravity => 'SouthWest',
};
my $image = Image::Magick->new();
$image->Read($src_path);
$image->Annotate(%$rh_annotate);
$image->Write($store_path);
undef $image;
居然是乱码效果!!我用的是EmEdit编辑器,该文件是保存为utf-8未签名格式的,但就是乱码!
几经测试,终于发现。。。需要一个中文字体文件的支持。
在windows上可以找到很多,c:\windows\fonts\目录下,仿宋、黑体、隶书等等都可以,这种ttf的文件copy到linux上一样有用,只需要指定font的位置即可
修改代码如下:
my $rh_annotate = {
text => $text,
font => 'fonts/simfang.ttf',
style => 'Normal',
pointsize => $pointsize,
fill => 'white',
gravity => 'SouthWest',
encoding => 'UTF-8',
};
OK!测试通过!写出了仿宋字体的中文。
另外,如果你用的是UltraEdit,EditPlus等不支持编码格式的编辑器,那默认是gb2312的编码,需要转码才能写中文:
use Encode;
$text = encode('utf8',decode('gbk',$text));
这样就可以了,具体转码问题这里不多说了,详见Perl的Encode模块。
另外再提供给大家一些ImageMagick的经典文档:
http://www.imagemagick.org/Usage/text/
http://www.imagemagick.org/script/perl-magick.php
呵呵,希望对大家有帮助,少走歪路(我自己在写中文问题上堵了很久,一直以为是编码问题,太傻了)