在应用开发中,绘图是不能绕过的一项技术,比如在用户需要的图像绘制、验证码、水印等中,PHP绘制图形比较容易,了解基本的函数即可开始编写代码。
在php.ini中打开绘图设置:extension=gd2,重启Web服务器。
图象的左上角坐标是 (0,0)。
下面的代码绘制一幅图片并返回给客户端:
<?php
// imagecreat(宽,高):创建一个白色背景的画布
// imagecreatetrueColor(宽,高):创建一个黑色背景(无色)的真彩画布
// imagecraetefromjpeg(图片文件路径):打开一个为JPEG格式的文件
// imagecraetefromgif(图片文件路径):打开一个为GIF格式的文件
// imagecraetefrompng(图片文件路径):打开一个为PNG格式的文件
// imagecolorallocate():给指定的画布资源分配颜色rgb(r,g,b)
// imagefill(图片资源ID,x,y,颜色ID):填充颜色
// imageline(图片资源ID,左上角x,左上角y,右下角x,右下角y,颜色ID):从起点(左上角x,左上角y)到终点(右下角x,右下角y)画直线
// imageractangle(图片资源ID,左上角x,左上角y,右下角x,右下角y,颜色ID):画矩形框
// imagearc(图片资源ID,轴点x,轴点y,宽度,高度,弧度的起点,弧度的终点,颜色ID):画圆弧
// imagestring(图片资源ID,文字大小,起始坐标x,起始坐标y,内容,颜色ID):在图片上写字(主要是ASCII的英文字符)
// imagettftext(图片资源ID,文字大小,旋转角度,起始坐标x,起始坐标y,颜色ID,字体,内容):在图片上写字(任意文字,包括汉字)
$img=imagecreateTruecolor(300,200) or dir('创建图片失败!');//创建图片
$colorBack=imagecolorallocate($img,9,19,199);//定义颜色
imagefill($img,1,1,$colorBack);//填充背景色
$colorPen=imagecolorallocate($img,255,0,0);//定义颜色
imageline($img,3,3,119,119,$colorPen);//画直线
imagerectangle($img,17,17,77,77,$colorPen);//画矩形
$colorPen=imagecolorallocate($img,0,255,0);//定义颜色
imagearc($img,150,100,100,100,180,360,$colorPen);//画圆弧
$colorPen=imagecolorallocate($img,255,255,0);//定义颜色
imagestring($img,10,10,30,'PHP String',$colorPen);//输出PHP String
$font='simkai.ttf';
imagettftext($img,19,45,139,139,$colorPen,realpath($font),'PHP 绘图');//输出PHP绘图
//imagepng($img,'test.png');//存储在本地
header('Content-type:image/png');//返回给浏览器的响应头,告诉浏览器是PNG图片
imagepng($img);
imagedestroy( $img );//销毁资源
?>
客户端显示:
PHP提供了丰富的绘图函数,在编写代码前肯定要大致了解一下函数的作用,根据需要再去查手册资料以确定详情。
比如,绘制虚线,可以自己来绘制,也可以利用imagedashedline函数来完成,实际上,推荐的做法是利用imagesetstyle() 和 imageline() 的组合来实现。
一、图像创建
⑴ imagecreatetruecolor — 新建一个真彩色图像
⑵ imagealphablending — 设定图像的混色模式
二、为图像设置颜色
⑴ imagecolorallocate — 为一幅图像分配颜色
⑵ imagecolorallocatealpha — 为一幅图像分配颜色和alpha
⑶ imagecolorat — 取得某像素的颜色索引值
⑷ imagecolorclosest — 取得与指定的颜色最接近的颜色的索引值
⑸ imagecolorclosestalpha — 取得与指定的颜色加透明度最接近的颜色
⑹ imagecolorclosesthwb — 取得与给定颜色最接近的色度的黑白色的索引
⑺ imagecolorexact — 取得指定颜色的索引值
⑻ imagecolorexactalpha — 取得指定的颜色加透明度的索引值
⑼ imagecolorresolve — 取得指定颜色的索引值或有可能得到的最接近的替代值
⑽ imagecolorresolvealpha — 取得指定颜色和alpha 的索引值或有可能得到的最接近的替代值
⑾ imagecolorsforindex — 取得某索引的颜色
⑿ imagecolortransparent — 将某个颜色定义为透明色
⒀ imagecolorstotal — 取得一幅图像的调色板中颜色的数目
⒁ imagecolorset — 给指定调色板索引设定颜色
⒂ imagecolormatch — 使一个图像中调色板版本的颜色与真彩色版本更能匹配
⒃ imagecolordeallocate — 取消图像颜色的分配
⒄ imagepalettecopy — 将调色板从一幅图像拷贝到另一幅
⒅ imagepalettetotruecolor — 将基于调色板的图像转换为真彩色
三、在图像上输出点线面
⑴ imagesetstyle — 设定画线的风格
⑵ imagesetthickness — 设定画线的宽度
⑶ imagesetbrush — 设定画线用的画笔图像
⑷ imageline — 画一条线段
⑸ imagedashedline — 画一虚线
⑹ imagesetpixel — 画一个单一像素
⑺ imagerectangle — 画一个矩形
⑻ imagepolygon — 画一个多边形
⑼ imagearc — 画椭圆弧
⑽ imageellipse — 画一个椭圆
⑾ imagefill — 区域填充
⑿ imagefilledarc — 画一椭圆弧且填充
⒀ imagefilledellipse — 画一椭圆并填充
⒁ imagefilledpolygon — 画一多边形并填充
⒂ imagefilledrectangle — 画一矩形并填充
⒃ imagefilltoborder — 区域填充到指定颜色的边界为止
四、在图像上输出文本
⑴ imagefontheight — 取得字体高度
⑵ imagefontwidth — 取得字体宽度
⑶ imageloadfont — 载入一新字体
⑷ imageftbbox — 给出一个使用 FreeType 2 字体的文本框
⑸ imagefttext — 使用 FreeType 2 字体将文本写入图像
⑹ imagechar — 水平地画一个字符
⑺ imagecharup — 垂直地画一个字符
⑻ imagestring — 水平地画一行字符串
⑼ imagestringup — 垂直地画一行字符串
⑽ imagepsbbox — 给出一个使用 PostScript Type1 字体的文本方框
⑾ imagepsencodefont — 改变字体中的字符编码矢量
⑿ imagepsextendfont — 扩充或精简字体
⒀ imagepsfreefont — 释放一个 PostScript Type 1 字体所占用的内存
⒁ imagepsloadfont — 从文件中加载一个 PostScript Type 1 字体
⒂ imagepsslantfont — 倾斜某字体
⒃ imagepstext — 用 PostScript Type1 字体把文本字符串画在图像上
⒄ imagettfbbox — 取得使用 TrueType 字体的文本的范围
⒅ imagettftext — 用 TrueType 字体向图像写入文本
五、电子信息签名
⑴ iptcembed — 将二进制 IPTC 数据嵌入到一幅 JPEG 图像中
⑵ iptcparse — 将二进制 IPTC 块解析为单个标记
六、图像存储
⑴ imagegd2 — 将 GD2 图像输出到浏览器或文件
⑵ imagegd — 将 GD 图像输出到浏览器或文件
⑶ imagegif — 输出图象到浏览器或文件。
⑷ imagejpeg — 输出图象到浏览器或文件。
⑸ imagepng — 以 PNG 格式将图像输出到浏览器或文件
⑹ imagewbmp — 以 WBMP 格式将图像输出到浏览器或文件
⑺ imagewebp — 将 WebP 格式的图像输出到浏览器或文件
⑻ imagexbm — 将 XBM 图像输出到浏览器或文件
⑼ image2wbmp — 以 WBMP 格式将图像输出到浏览器或文件
七、图像格式转换
⑴ jpeg2wbmp — 将 JPEG 图像文件转换为 WBMP 图像文件
⑵ png2wbmp — 将 PNG 图像文件转换为 WBMP 图像文件
八、截图
⑴ imagegrabscreen — 捕获整个屏幕
⑵ imagegrabwindow — 捕获一个窗口
九、图像变形
⑴ imageaffine — 返回经过仿射变换后的图像,剪切区域可选
⑵ imageaffinematrixconcat — 合并两个矩阵
⑶ imageaffinematrixget — 返回包含仿射变形源图像的图像,使用可选的剪裁区域
⑷ imagerotate — 用给定角度旋转图像
⑸ imagecrop —使用给定的区域裁剪图像
⑹ imagecropauto — 使用可用模式自动裁剪图像
⑺ imagescale —使用给定的新宽度和高度缩放图像
十、图像复制
⑴ imagecopy — 拷贝图像的一部分
⑵ imagecopymerge — 拷贝并合并图像的一部分
⑶ imagecopymergegray — 用灰度拷贝并合并图像的一部分
⑷ imagecopyresampled — 重采样拷贝部分图像并调整大小
⑸ imagecopyresized — 拷贝部分图像并调整大小
⑹ imagecreate — 新建一个基于调色板的图像
⑺ imagecreatefromgd2 — 从 GD2 文件或 URL 新建一图像
⑻ imagecreatefromgd2part — 从给定的 GD2 文件或 URL 中的部分新建一图像
⑼ imagecreatefromgd — 从 GD 文件或 URL 新建一图像
⑽ imagecreatefromgif — 由文件或 URL 创建一个新图象。
⑾ imagecreatefromjpeg — 由文件或 URL 创建一个新图象。
⑿ imagecreatefrompng — 由文件或 URL 创建一个新图象。
⒀ imagecreatefromstring — 从字符串中的图像流新建一图像
⒁ imagecreatefromwbmp — 由文件或 URL 创建一个新图象。
⒂ imagecreatefromwebp — 由文件或 URL 创建一个新图象。
⒃ imagecreatefromxbm — 由文件或 URL 创建一个新图象。
⒄ imagecreatefromxpm — 由文件或 URL 创建一个新图象。
十一、图像资源销毁
⑴ imagedestroy — 销毁一图像