GD库函数实现"中文水印"

  $im = imagecreatetruecolor(100,100);//新建一个真彩色图像

  $white = imagecolorallocate($im,255,235,255);//为一幅图像分配颜色,这一点和我的设计常识有区别..我从来没想过,在绘画时,要先给指定的图像标识分配颜色..这个函数经常和imagefill函数搞混.

  imagefill($im,0,0,$white); //区域填充

  $black = imagecolorallocate($im,250,50,50);//为一幅图像分配颜色

  imagerectangle($im,5,5,50,50,$black);//绘制一个矩形

  header("Content-type: image/jpeg"); //发送标头,配合imagejpeg直接在浏览器中输出图像。

  imagejpeg($im,'ImageName',100);//输出一个像图,定名与质量

  imagedestroy($im);//释放与 image 关联的内存。image 是由图像创建函数返回的图像标识符

  ?>

  利用 GD 库实现"中文水印"

  发表时间: 2006-12-29 20:50 作者: hy0kl 来源: PHPChina 开源社区门户

  此帖首先特别鸣谢 lmhllr 仁兄,没有他的指导偶此刻可能还在搜资料中 ing......

  首先申明本人是新手,对于 GD 库是一知半解,不到之处还请大家见谅吧.^_^

  自从在网上看到 php + GD 库能实现图片加"中文水印",开始了 GD 库的学习.

  于是参照着下载的资料改了一个脚本,能实现 php绘图,当时很是窃喜了 N 久.(见笑!)

  之后就用 imagestring() 函数在图像上实现了英文的"水印";但当偶尝试着用它加"中文水印"时发,打印出来的全是乱码.

  于是又开始踏上解决乱码的路途.

  许久没有得到满意的答案,就放弃了.

  最近,发现 lmhllr 仁兄的个性签名十分特别,询问之后终于知道原因了: GD 库对中文支持的不是很好, imagettftext() 函数的字符集若是 UTF-8 ,则可以直接传递.

  换言之,必需将 gb2312 的字符集转换成 UTF-8 的字符.可以使用 iconv() 函数来实现.偶的珍藏版 PHP 手册居然查不到本函数, ,不过可以到 php 官方网站查看 http://cn.php.net/manual/zh/ref.iconv.php ,只可惜并不是所有函数都有中文翻译,偶的 E 文不好,只能看着 lmhllr 仁兄的例子脚本猜了.此函数将 gb2312 的字符转换成 UTF-8 的字符.然后再调用函数,实现加"中文水印".

  偶在偶的机子测试后得出:GD 支持的中文字体有 simhei.ttf(黑体) , SIMKAI.TTF(楷体) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋体&新宋体)等了.当然,脚本里面只能代入英文名称了,诶,谁叫操作系统不是咱写的呢.

  希望本帖能给和偶一样遭遇的同志们一点启发.^_^

  下面是一个简单的测试脚本了.

  [php]

  Header("Content-type: image/png"); /*通知浏览器,要输出图像*/

  $im = imagecreate(400 , 300); /*定义图像的大小*/

  $gray = ImageColorAllocate($im , 235 , 235 , 235);

  $pink = ImageColorAllocate($im, 255 , 128 , 255);

  /*

  $fontfile = "C:\WINDOWS\Fonts\SIMHEI.TTF";

  不好意思,这句老是粘上后一提交就丢了,不知道是怎么回事,想测试的朋友们将注释去了现测试吧

  */

  /* $fontfile 字体的路径,视操作系统而定,可以是 simhei.ttf(黑体) , SIMKAI.TTF(楷体) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋体&新宋体) 等 GD 支持的中文字体*/

  $str = iconv('GB2312','UTF-8','中文水印!!!'); /*将 gb2312 的字符集转换成 UTF-8 的字符*/

  ImageTTFText($im, 30, 0, 50, 140, $pink , $fontfile , $str);

  /* 加入中文水印 */

  Imagepng($im);

  ImageDestroy($im);

  ?>[/php]

  OK ,收工,但愿这是本人的第一个有质量的水帖.

  下面是本例子的效果了.再次对 lmhllr 表示由衷的感谢!!!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Grow your business fast with

Suku