Home  >  Article  >  php教程  >  GD库函数实现中文水印

GD库函数实现中文水印

WBOY
WBOYOriginal
2016-06-13 10:37:45787browse

  $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:WINDOWSFontsSIMHEI.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 表示由衷的感谢!!!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn