- 论坛徽章:
- 0
|
背景:
header决定耗费近20%的效率来提供一个我认为不是很关键的需求.即中文传真头.没办法,只能去google看有没有办法了.tifflib似乎并不难,但需要图形基础,且向上面画文字似乎不是一朝一夕就被我搞定的.于是求救于perl,最后找到Imager与GD库,但又遭遇字体(开始认为是Unicode)问题.做个菜鸟真难呀,好不容易看英语文档弄懂了其使用方法,可是结果总不是我翻译过来的那个效果,于是只能猜了......那种成功就在眼前,却似乎又越来越远的感觉真的折磨人呀.我已经感觉累了,快放弃了,google都不知开了多少回输入了多少相关的英语和汉语,可是总是跑到几乎相同的网页或是其翻译版.于是我开始搜索看似相关性越来越远的词汇,自己的设想也越来越大胆(不知所措的代词).最终,只是一个小想法让我觉得无奈,原来一开始做的工作都是对的,只是自己没有提供一个合适的中文字体,疯了!
正文:
T.30传真协议头不支持中文,那么只能修改欲发送的传真的源文件,将传真头信息插入到文件头来欺骗传真机.
别的不多说了,先看代码:
#!/usr/bin/perl --
use Imager;
use strict;
#判断支持的字体类型
print "Has truetype" if $Imager::formats{tt};
print "\n";
print "Has t1 postscript" if $Imager::formats{t1};
print "\n";
print "Has Win32 fonts" if $Imager::formats{w32};
print "\n";
print "Has Freetype2" if $Imager::formats{ft2};
print "\n";
sub writeFaxHeader{
print "===writeFaxHeader===\n";
my ($srcImage, $header, $newImage) = @_;
#本机的字体文件全路径
my $fontfile="/usr/share/fonts/truetype/arphic/uming.ttf";
my $font=Imager::Font->new(file=>$fontfile, type=>'ft2') or die "No";
#创建一个新的Imager对象
my $img=Imager->new();
#从一个tiff文件中读取数据
$img->read(file=>$srcImage, type=>'tiff') or die $img->errstr();
#向图片的指定位置绘制指定文本,字体用的是上面创建的font对象
$img->string(font=> $font, x=>0, y=>50, string=>$header, color=> 'black' , size=>50, aa=>1, utf8=>1) or die $img->errstr();
#将修改的Imager对象写回磁盘
$img->write(file=>$newImage, type=>'tiff', class=>'fax') or die $img->errstr;
print "===Header ok===\n";
}
writeFaxHeader("src.tif", "大家好", "head.tif");
看上去挺简单的,实际上呢,也是挺简单的.但是对于我这样一个菜鸟来说真是头疼死了.中文字符码,仿佛是一真追随我的编程问题.步步为艰.一开始,流程全都正确,就是绘出的中文全是方框或乱码.现在知道是字体路径的问题,应该用支持中文的字体,如:uming.ttf,ukai.ttf这两个文鼎字体,当然其他的中文字体也应该是可以的,但是英文字体就会是方框或乱码.
做个菜鸟不容易,现在好了,跳过一槛.
参考:
CPAN Imager
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/48467/showart_454781.html |
|