GD2函数库是一个开放的、动态创建图像的、源代码公开的函数库,可以从官方网站http://www.boutell.com/gd下载最新版本的GD2库。使用GD2函数库可以在页面中绘制各种图形图像,以及统计图,如果与Ajax技术相结合,还可以制作出各种强大的动态图表。
在PHP中,对图像的操作可以分为以下4个步骤:
创建画布-->在画布上绘制图形-->保存并输出结果图像-->销毁图像资源。
1、创建画布
GD2函数库在图形图像绘制方面功能非常强大,利用它开发人员既可以在已有图片的基础上进行绘制,也可以在没有任何素材的基础上绘制,在后者情况下首先要创建画布,之后所有操作都将依据所创建的画布进行。
<span style="font-size:18px;">resource imagecreate( int x_size, int y_size)</span>
//该函数用于返回一个图像标识符,参数单位为像素(pixel)
载入图片用:imagecreatefromjpeg("图片的相对地址") //对.jpg类的图片,其他种类的图片类似
2、颜色处理
应用GD2函数库绘制图形需要为图形中的背景、边框和文字等元素指定颜色。
<span style="font-size:18px;">int imagecolorallocate( resource image, int red, int green, int blue)</span>
注意:在画布上第一次调用imagecolorallocate将完成背景颜色的填充。
3、绘制文字
应用PHP中的GD库既可以绘制英文字符串,也可以绘制中文汉字。
绘制英文字符串:
<span style="font-size:18px;"><span style="font-size:18px;">bool imagestring( resource image, int font, int x, int y, string s, int col)</span></span>
//imagestring()函数用col颜色将字符串s绘制到image所代表的图像的x,y坐标处(这是字符串左上角坐标,整幅图像的左上角为0,0)。如果font是1、2、3、4或5,则使用内置字体。
绘制中文汉字:
<span style="font-size:18px;">array imagettftext( resource image, float size, float angle, int x, int y, int color, string fontfile, string text)</span>
//size:字体大小。根据GD版本不同,应以像素大小指定(GD1)或点大小(GD2)
//angle:字体的角度,逆时针计算,0°为水平,(从左到右),90°则为由下到上的文字
//x,y:文字的坐标值
//color:文字的颜色
//fontfile:字体的文件名称,也可以是远端的文件
//text:字符串内容
注意:在GD2函数库中支持的是UTF-8编码格式的中文,所以在通过imagettftext()函数输出中文字符串时,必须保证中文字符串的编码格式是UTF-8,否则中文将不能正确地输出。如果定义的中文字符串是GB2312简体中文编码,那么要通过iconv()函数对中文字符串的编码格式进行转换。
4、输出图像
PHP作为一种Web语言,无论是解析出的HTML代码还是二进制的图片最终都要通过浏览器显示。应用GD2函数绘制的图像首先需要用header()函数发送HTTP头信息给浏览器,告知所要输出图像的类型,然后应用GD2函数库中的函数完成图像输出。
<span style="font-size:18px;">void header( string string [, bool replace [, int http_response_code]])</span>
//string:发送的标头。
//replace:如果一次发送多个标头,对于相似的标头是替换还是添加。如果是FALSE,则强制发送多个同类型的标头。默认为TRUE,即替换。
//http_response_code:强制HTTP响应为指定值。
使用header()函数可以实现如下4种功能:
(1)重定向,这是最常用的功能:
<span style="font-size:18px;">header("Location: http://www.xxx.com")
</span>
(2)强制客户端每次访问页面时获取最新资料,而不是使用存在于客户端的缓存。
<span style="font-size:18px;">//设置页面的过期时间(用格林威治时间表示)
header("Expires: Mon, 08 Jul 2018 08:08:08 GMT");
//设置页面的最后更新日期(用格林威治时间表示),使浏览器获取最新资料
header("Last-Modified:".gmdate("D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");//控制页面不使用缓存
header("Pragma: no-cache"); //参数(与以前的服务器兼容),即兼容HTTP 1.0协议
header("Content-type: application/file"); //输出MIME类型
header("Content-Length: 227685"); //文件长度
header("Accept-Ranges:bytes");//接受的范围单位
//默认时文件保存对话框中的文件名称
header("Content-Disposition: attachment; filename=$filename"); //实现下载
</span>
(3)输出状态值到浏览器,控制访问权限。
<span style="font-size:18px;">header('HTTP/1.1 401 Unauthorized');
header('status: 401 Unauthorized');
</span>
(4)完成文件的下载
<span style="font-size:18px;">header("Content-type: application/x-gzip");
header("Content-Disposition: attachment; filename=文件名");
header("Content-Description: PHP3 Generated Data");</span>
imagegif()函数以GIF格式将图像输出到浏览器或文件,语法如下:
<span style="font-size:18px;">bool imagegif( resource image [, string filename])</span>
imagejpeg()和imagepng()函数的使用方法同imagegif()类似。
5、销毁图像
在GD2函数库中通过imagedestroy()函数来销毁图像,释放内存。
<span style="font-size:18px;"><span style="font-size:18px;">bool imagedestroy( resource image)</span></span>