PHP学习笔记——图形图像

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZLANBL085321/article/details/86537369

一、GD2函数库
1、创建画布
使用函数库GD2,开发人员既可以在已有图片的基础上进行绘制,也可以在没有任何素材的基础上绘制,在这种情况下首先要创建画布,之后所有操作都将依据所创建的画布进行。
resource imagecreate ( int x_size , int y_size )
新建一个基于调色板的图像,返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像(单位为像素pixel)。

2、颜色处理
int imagecolorallocate ( resource image , int red , int green , int blue )
为一幅图像分配颜色,返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色。 第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色,即用 imagecreate() 建立的图像。

3、输出图像
1)发送原生HTTP头
void header ( string str [, bool replace = true [, int http_response_code ]] )
注意,header() 必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。这是个常见的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行。 同样的问题也存在于单独的 PHP/HTML 文件中。
参数str表示头字符串,有两种特别的头。第一种以“HTTP/”开头的 (case is not significant),将会被用来计算出将要发送的HTTP状态码。 例如在 Apache 服务器上用 PHP 脚本来处理不存在文件的请求(使用 ErrorDocument 指令), 就会希望脚本响应了正确的状态码。第二种特殊情况是“Location:”的头信息。它不仅把报文发送给浏览器,而且还将返回给浏览器一个 REDIRECT(302)的状态码,除非状态码已经事先被设置为了201或者3xx。
可选参数 replace 表明是否用后面的头替换前面相同类型的头。 默认情况下会替换。如果传入 FALSE,就可以强制使相同的头信息并存。
参数http_response_code强制指定HTTP响应的值。注意,这个参数只有在报文字符串(str)不为空的情况下才有效。

2)输出图片
bool imagegif ( resource image [, string filename ] )
从 image 图像以 filename 为文件名创建一个 GIF 图像。image 参数是 imagecreate() 或 imagecreatefrom* 函数的返回值。图像格式为 GIF87a。如果用了 imagecolortransparent() 使图像为透明,则其格式为 GIF89a。
可选参数filename是文件保存的路径,如果未设置或为 NULL,将会直接输出原始图象流。
成功时返回 TRUE, 或者在失败时返回 FALSE。
注意,不过从 GD 库 1.6 起所有的 GIF 支持都移除了,并在版本 2.0.28 中加了回来。如果使用这些 版本之间的 GD 库时本函数不可用。可以使用bool function_exists ( string function_name )在已经定义的函数列表(包括系统自带的函数和用户自定义的函数)中查找 function_name的方法来检查是否支持某种图像格式(如function_exists(‘imagegif’)),但是自 PHP 3.0.18 和 4.0.2 起可以用int imagetypes ( void )(本函数以比特字段方式返回与当前 PHP 版本关联的 GD 库所支持的图像格式。将返回以下结果,IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP| IMG_XPM。)函数代替 function_exists() 来检查是否支持某种图像格式。
bool imagepng ( resource image [, string filename ] )和imagegif()函数使用方法类似。
bool imagejpeg ( resource image [, string filename [, int quality ]] )
可选参数filename文件保存的路径,如果未设置或为 NULL,将会直接输出原始图象流。如果要省略这个参数而提供 quality 参数,使用NULL。
可选参数quality范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认为 IJG 默认的质量值(大约75)。
成功时返回 TRUE, 或者在失败时返回 FALSE。
注意,如果想输出渐进式 JPEG,需要用 imageinterlace() 函数将隔行扫描比特置位(int imageinterlace ( resource image [, int interlace ] ),打开或关闭隔行扫描的比特标记。如果 interlace 为 1 则图像为隔行扫描的,如果 interlace 为 0 则图像为非隔行扫描的。如果设定了隔行扫描比特标记而图像使用 JPEG 格式,则图像被创建为渐进式 JPEG。本函数返回图像中是否设定了隔行扫描比特标记。)。
bool imagewbmp ( resource image [, string filename [, int foreground ]] )
可选参数filename如果省略,则直接将原图像流输出。通过用 header() 发送 image/vnd.wap.wbmp 的 Content-type,可以创建直接输出 WBMP 图像的 PHP 脚本。
用可选的 foreground 参数可以设定前景色,用 imagecolorallocate() 函数返回的颜色标识符。默认前景色是黑色。
注意,WBMP 支持仅能用于 PHP 编译时加入了 GD-1.8 或更高版本时。

4、绘制基本图形
1)画一条线段
bool imageline ( resource image , int x1 , int y1 , int x2 , int y2 , int color )
用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。

2)画椭圆弧
bool imagearc ( resource image , int cx , int cy , int w , int h , int s , int e , int color )
以 cx,cy(图像左上角为 0, 0)为中心在 image 所代表的图像中画一个椭圆弧。w 和 h 分别指定了椭圆的宽度和高度,起始和结束点以 s 和 e 参数以角度指定。0°位于三点钟位置,以顺时针方向绘画。

3)画矩形
bool imagerectangle ( resource image , int x1 , int y1 , int x2 , int y2 , int col )
用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。

5、填充几何图形
1)区域填充
bool imagefill ( resource image , int x , int y , int color )
在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。

2) 画一椭圆弧且填充
bool imagefilledarc ( resource image , int cx , int cy , int width , int height , int start , int end , int color , int style )
参数image是由图象创建函数(例如imagecreatetruecolor())返回的图象资源。
参数cx是中间的 x 坐标。
参数cy是中间的 y 坐标。
参数width是椭圆弧的宽度。
参数height是椭圆弧的高度。
参数start是起点角度。
参数end是终点角度,0°位于三点钟位置,以顺时针方向绘画。
参数color是 imagecolorallocate() 创建的颜色标识符。
参数style的值可以是下列值的按位或(OR):
IMG_ARC_PIE
IMG_ARC_CHORD
IMG_ARC_NOFILL
IMG_ARC_EDGED
注意,IMG_ARC_PIE 和 IMG_ARC_CHORD 是互斥的;IMG_ARC_CHORD 只是用直线连接了起始和结束点,IMG_ARC_PIE 则产生圆形边界(如果两个都用,IMG_ARC_CHORD生效)。IMG_ARC_NOFILL 指明弧或弦只有轮廓,不填充。IMG_ARC_EDGED 指明用直线将起始和结束点与中心点相连,和 IMG_ARC_NOFILL 一起使用是画饼状图轮廓的好方法(而不用填充)。
注意,此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。

3)画一椭圆并填充
boo imagefilledellipse ( resource image , int cx , int cy , int width , int height , int color )
其使用方法和imagefilledarc()函数类似。

4)画一矩形并填充
bool imagefilledrectangle ( resource image , int $x1 , int y1 , int x2 , int y2 , int color )
imagefilledrectangle() 在 image 图像中画一个用 color 颜色填充了的矩形,其左上角坐标为 x1,y1,右下角坐标为 x2,y2。0, 0 是图像的最左上角。

6、输出字符串
1)水平地画一行字符串
bool imagestring ( resource image , int font , int x , int y , string s , int col )
用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。

2)垂直地画一行字符串
bool imagestringup ( resource image , int font , int x , int y , string s , int col )
用 col 颜色将字符串 s 垂直地画到 image 所代表的图像的 x, y 座标处(图像的左上角为 0, 0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。

3)用 TrueType 字体向图像写入文本
array imagettftext ( resource image , float size , float angle , int x , int y , int color , string fontfile , string text )
参数image是由图象创建函数(例如imagecreatetruecolor())返回的图象资源。
参数size是字体的尺寸。根据 GD 的版本,为像素尺寸(GD1)或点(磅)尺寸(GD2)。
参数angle是角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。
参数x是由 x,y 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和 imagestring() 不同,其 x,y 定义了第一个字符的左上角。例如 “top left” 为 0, 0。
参数y是Y 坐标。它设定了字体基线的位置,不是字符的最底端。
参数color是颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。见 imagecolorallocate()。
参数fontfile是想要使用的 TrueType 字体的路径(全路径)。根据 PHP 所使用的 GD 库的不同,当 fontfile 没有以 / 开头时则 .ttf 将被加到文件名之后并且会在库定义字体路径中尝试搜索该文件名。当使用的 GD 库版本低于 2.0.18 时,一个空格字符 而不是分号将被用来作为不同字体文件的“路径分隔符”。不小心使用了此特性将会导致一条警告信息:Warning: Could not find/open font。对受影响的版本来说唯一解决方案就是将字体移动到不包含空格的路径中去。
参数 text是UTF-8 编码的文本字符串。可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置 127 的字符。UTF-8 编码的字符串可以直接传递。 命名实体,比如 © 是不支持的。可以考虑使用 html_entity_decode() 来解码命名实体为 UTF-8 字符。 (自 PHP 5.0.0 开始 html_entity_decode() 开始支持)如果字符串中使用的某个字符不被字体支持,一个空心矩形将替换该字符。使用iconv()函数可以防止中文乱码,如iconv(“UTF-8”,“GB2312//IGNORE”,“月份”)。
返回一个含有 8 个单元的数组表示了文本外框的四个角,顺序为坐下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
本函数同时需要 GD 库和 FreeType 库。

4)取得使用 TrueType 字体的文本的范围
array imagettfbbox ( float size , float angle , string fontfile , string text )
本函数计算并返回一个包围着 TrueType 文本范围的虚拟方框的像素大小。
参数size是像素单位的字体大小。
参数angle是text 将被度量的角度大小。
参数fontfile是TrueType 字体文件的文件名(可以是 URL)。根据 PHP 所使用的 GD 库版本,可能尝试搜索那些不是以 ‘/’ 开头的文件名并加上 ‘.ttf’ 的后缀并搜索库定义的字体路径。
参数text是要度量的字符串。
imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角:
0 左下角 X 位置
1 左下角 Y 位置
2 右下角 X 位置
3 右下角 Y 位置
4 右上角 X 位置
5 右上角 Y 位置
6 左上角 X 位置
7 左上角 Y 位置
这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
本函数同时需要 GD 库和 FreeType 库。

二、Jpgraph类库
Jpgraph类库是一个可以应用在PHP4.3.1以上版本的用于图形图像绘制的类库(主要用于创建统计图),该类库完全基于GD2函数库编写。

展开阅读全文

没有更多推荐了,返回首页