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