为了账号安全,请及时绑定邮箱和手机立即绑定

PHP中图像处理简介

标签:
PHP

PHP图形处理相关函数举例

在PHP中有的图形函数可以直接使用,但大多数函数需要安装GD2函数库才能使用。在Windows平台下,安装GD2库很简单,PHP5中自带了GD2库扩展(就是PHP的ext目录下的php_gd2.dll文件)。运行phpinfo()页面查看是否有GD的部分,如果有,说明已经安装了GD2库,如果没有,说明安装PHP时没有安装GD2库。打开php.ini文件,查看文件中是否有一句“;extension=php_gd2.dll”,如果有则将其中的“;”去掉,再打开文件扩展目录extension_dir的值设置成PHP的ext目录所在的完整路径,保存后重启Apache即可。

PHP所能处理的图像格式取决于所安装的GD版本,以及其他GD可能用到的来访问这些图像格式的库。低于gd-1.6版本的GD支持GIF格式,不支持PNG,高于gd-1.6低于gd-2.0.28的版本支持PNG,不支持GIF。在gd-2.0.28中又重新支持GIF。

目前的GD2库支持JPEG、PNG、GIF、WBMP等文件格式。JPEG通常用来存储照片或者具有丰富色彩和色彩层次的图像,这种格式使用了有损压缩,图像质量有所破坏,由于这个原因,该格式不适合绘制线条、文本或颜色块。GIF是图形文件交换格式,广泛应用于网络,适合存储包含文本、线条和简单颜色块的图像。PNG是可移植的网络图像,该嘎是是无损压缩,所以适合直线、文本或简单颜色块的图像,由于GIF的专利原因,PNG在一段时间内是作为GIF的替代品使用的。WBMP是专门为无限通信设备设置的文件格式,但是没有得到广泛的发展。

一、创建图形

在PHP中创建图形的步骤有:创建一个背景、在背景中绘制图形或输入文本、输出图形、释放所有资源。

注意在使用PHP输出图形时,一定要使用header()函数向浏览器发送头信息,指定浏览器输出相应格式的文件。若头信息为“Content-type:image/png”,表示浏览器将输出PNG格式的图片。如果在程序中输出文本信息,则在浏览器中不会显示。

1.创建背景图形

创建背景可以使用imagecreate()和imagecreatetruecoloc()函数,这两个函数都可以创建一个空白的图形,并返回一个图像标志符,供其它函数使用。

resource imagecreate(int $x_size,int $y_size)

resource imagecreatetruecolor(int $x_size,int $y_size)

$x_size是背景的宽度,$y_size是背景的高度,imagecreate()函数用于建立一个基于调色板的图形,创建后可改变背景颜色。imagecreatetruecolor()函数用于创建一个真彩色图形,背景颜色默认为黑色。如果创建成功,函数将返回一个句柄,如果失败,并不会像其他函数一样返回FALSE,这时可以使用die()函数来捕获错误信息。类似imagecreate()的函数都可以使用die()函数来捕获错误信息。

背景创建之后,就可以使用图形函数在背景中绘制图形或输入文本。

2.使用已有图片创建新图形

imagecreatefromfig()函数可以根据已有的GIF图形创建新图形,imagecreatefromjpeg()函数可以根据已有的JPEG图片创建新图形,imagecreatefrompng()函数可以根据已有的PNG图片创建新图形。已有的图片可以是远程的图片文件。

使用这些函数后已有的图片将作为新图形的背景,之后的操作和imagecreate()函数创建背景图形的操作方法一样。

3.选择颜色

颜色值得选择需要使用imagecolorallocate()函数来完成。

int imagecolorallocate(resource $image,int $red,int $green,int $blue)

imagecolorallocate()函数返回一个标志符,代表了由给定的红、绿、蓝(RBG)值组成的颜色。$red、$green、$blue分别是所需要的颜色的红、绿、蓝成分。这些参数是0~255的整数或者是十六进制的0x00~0xFF。imagecolorallocate()函数必须被调用以创建每一种用在$image所代表的图形中的颜色。黑色(0,0,0)、红色(255,0,0)、蓝色(0,0,255)、白色(255,255,255)、绿色(0,255,0)。

4.输出图形

使用imagegif()函数可以将图形以GIF格式输出到浏览器或文件,image'jpeg()将图形以JPEG格式输出,imagepng()函数将图形以PNG格式输出。

bool imagepng(resource $image[,string $filename])

bool imagegif(resource $image[,string $filename])

bool imagejpeg(resource $image[,string $filename[,int $quality]])

$image是已经创建的图像句柄,如果不提供参数$filename,则直接输出原始图形。如果提供参数$filename,则以$filename为文件名创建一个相应格式的图片,保存以后Web页面中就可以使用该图片了。imagejpeg()函数中的可选参数$quality,范围从0(最差质量,文件最小)到100(最佳质量,文件最大).

不管输出什么格式的图片,都要使用header()函数向浏览器发送相应的头信息。如果要输出GIF格式的图片应使用:“header("Content-type:image/gif");”;输出JPEG格式的图片应使用“header("Content-type:image/jpeg");”;PNG格式使用“header("Content-type:image/png");”。

5.清除资源

为了节省资源,图片创建后返回的句柄如果不再使用,就要用imagedestory()函数来释放与之相关的内存。

二、绘制图形

1.绘制几何图形

(1)画一个点

使用imagesetpixel()函数就可以在已经创建的背景图形上画一个单一像素,即一个点。

bool imagesetpixel(resource $image,int $x,int $y, int $color)

imagesetpixel()函数在已经创建的图形$image上用$color颜色在($x,$y)坐标上画一个点。起始坐标从左上角开始,坐标为(0,0),到右下角的坐标为($x_size,$y_size),其中$x_size和$y_size是背景图形的宽和高。

(2)画一条线段

使用imageline()函数可以画出一条线段。

bool imageline(resource $image ,int $x1 ,$int $y1, int $x2, int $y2,int $color)

imageline()函数可以在已经创建的图形$image上使用$color颜色画出一条坐标从($x1,$y1)到($x2,$y2)的线段。

(3)画一个矩形

绘制矩形可以使用imagerectangle()函数来完成。

bool imagerectangle(resource $image,int $x1,int $y1,int $x2,int $y2,int $color)

imagerectangle()函数在已经创建的图形$image上使用$color颜色画出一个矩形,矩形的左上角坐标为($x1,$y1),右上角坐标为($x2,$y2)。

(4)画一个椭圆

使用imageellipse()函数可以画一个椭圆。

bool imageellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color)

imageellipse()函数在图形$image上画一个中心坐标为($cx,$cy)的椭圆。$w和$h分别指定了椭圆的宽度和高度,椭圆线条的颜色由$color指定。当椭圆的宽度和高度相等时,画出的将是一个圆。

(5)画一个椭圆弧

创建一个椭圆弧可以使用imagearc()函数

bool imagearc(resource $image,int $cx,int $cy,int $w,int $h,int $s,int $e, int $color)

imagearc()函数以坐标($cx,$cy)为中心在图形$image上画一个椭圆弧。$w和$h分别指定了椭圆的宽度和高度,当宽度和高度相等时,画出来的就是圆弧。起始和结束点用$s和$e参数以角度指定。0度位于三点钟位置,以顺时针方向绘画。

(6)画一个多边形

使用imagepolygon()函数可以画出一个多边形。

bool imagepolygon(resource $image,array $points,int $num_points,int $color)

imagepolygon()函数在$image中创建一个多边形。$points是一个PHP数组,包含了多边形的各个顶点坐标。即$points[0]=x0,$points[1]=y0,$points[2]=x1,$points[3]=y1,以此类推。$num_points是顶点的总数。

2.输出文本

(1)输出一个字符

使用imagechar()函数可以在图形上水平输出一个字符。

bool imagechar(resource $image,int $font,int $x,int $y,string $c,int $colot)

函数用颜色$color将字符$c画到$image的($x,$y)坐标处(这是字符串左上角坐标)。如果$c是一个字符串,则只输出第一个字符。$font表示字符串的字体,如果值为1~5中的一个数,则使用内置字体,值为5时字体最大,为1时最小。

imageup()函数可以垂直地输出一个字符,用法与imagechar()函数相同。

(2)输出字符串

使用imagestring()函数可以在已经创建的背景图形上输出字符串

bool imagestring(resource $image,int $font,int $x,int $y,string $s ,int $color)

函数用颜色$color将字符串$s画到$image的($x,$y)坐标处。

imagestringup()函数可以垂直地输出字符串,用法与imagestring()函数相同.

imagestring()函数不支持中文显示。

(3)使用指定字体输出字符串

使用imagettftext()函数可以在输出字符的同时指定输出字符所使用的字体,并根据参数的不同输出不同角度的字符串。

array imagettftext(resource $image,float $size,float $angle,int $x,int $y,int $color,string $fontfile,string $text)

本函数使用颜色$color将字符串$text输出到$image图形的($x,$y)坐标上,函数还可以使用$size参数指定字体的大小,使用$angle参数指定字体的角度,水平时角度为0,沿逆时针变大。使用$fontfile参数指定想要使用的TrueType的字体文件,该文件必须是一个有效的字体文件,否则运行时会产生错误。

在Windows平台下,字体文件全部位于C:\\Windows\Fonts目录中,使用时可以将需要的字体文件复制到工作目录中,或者直接指定字体文件的位置。

(4)输出中文文字

中文字符不可以使用imagettftext()函数在图片中直接输出,如果要输出中文字符,需要先使用iconv()函数对中文字符进行编码。

string iconv(string $in_charset,string $out_charset,string $str)

参数$in_chatset是中文字符原来的字符集,$out_charset是编码后的字符集,$str是需要转换的中文字符串。函数最后返回编码后的字符串。这是使用imagettftext()函数就可以在图片中输出中文了。

3.绘制带填充色的几何图形

在PHP中可以使用imagefill()函数对某一区域进行颜色填充。

bool imagefill(resource $image,int $x,int $y,int $color)

函数在$image图形的坐标($x,$y)处用颜色$color执行区域填充,即与($x,$y)点颜色相同且相邻的点都会被填充上该颜色。

推荐使用imagecreatecolor()函数来创建图形。

使用imagefill()函数填充颜色时要计算填充点,这是一件很麻烦的事。PHP可以在画几何图形的时候就将几何图形填充为指定颜色。

(1)画一个矩形并填充

使用imagefilledrectangle()函数可以画一个矩形,并使用指定颜色填充该矩形。

bool imagefilledrectangle(resource $image,int $x1,int $y1,int $x2,int $y2,int $color)

imagefilledrectangle()函数的$color参数指定的是整个矩形区域的颜色。

函数imagefilledpolygon()可以画一个多边形并填充颜色。

(2)画一个椭圆并填色

使用imagefilledellipse()函数可以在已经创建的图形上画一个椭圆,并使用指定颜色进行填充。

bool imagefilledellipse(resource $image, int $cx ,int $cy,int $w,int $h, int $color)

(3)画一个椭圆弧并填色

函数imagefilledarc()函数可以画一个椭圆弧并填充颜色。

bool imagefilledarc(resource $image,int $cx,int $cy,int $w,int $h,int $s,int $e,int $color,int $style)

在$image中以坐标($cx,$cy)为中心画一个椭圆弧。如果成功则返回TRUE,失败则返回FALSE。$w和$h分别指定了椭圆的宽和高,$s和$e参数以角度指定了起始和结束点。$style指定了椭圆弧画出来的效果,值可以是以下几个:IMG_ARC_PIE(产生圆形边界)、IMG_ARC_CHORD(用直线连接起始和结束点)、IMG_ARC_NOFILL(指明弧或弦只有轮廓,不填充)和IMG_ARC_EDGED(用直线将起始和结束点与中心点相连)。$style的值可以一起使用,不过当IMG_ARC_PIE和IMG_ARC_CHORD一起使用时,只有IMG_ARC_CHORD将起作用。IMG_ARC_EDGED和IMG_ARC_NOFILL一起使用是画饼状图轮廓的好方法。

pi()函数的作用是返回圆周率的值,cos()函数和sin()函数的作用是返回一个弧度的余弦值和正弦值。number_format()函数的作用是格式化一个浮点数。

string number_format(float $number[,int $decimals[,string $dec_point[,string $thousands_sep]]])

参数$number是要格式化的浮点数:参数$decimals指定返回的小数的位数,若省略则只返回整数部分;$dec_point表示小数点的表示方式,默认值是“.”;参数$thousands_sep为整数部分每三位的分隔符号,默认值是“.”。

三、图形的处理

1.颜色处理

(1)指定颜色填充

使用imagefilltoborder()函数可以为指定点进行颜色填充,如果遇到指定颜色的边界时,则停止填充。

bool imagefilltoborder(resource $image,int $x,int $y,int $border,int $color)

该函数从坐标($x,$y)开始用$color颜色执行区域填充,知道碰到颜色为$border的边界为止。边界内的所有颜色都会被填充。

如果指定的边界色和该点颜色相同,则没有填充。如果图像中没有该边界色,则整幅图像都会被填充。

(2)定义透明色

使用imagecolorallocatealpha()函数也可以为指定的图形分配颜色,还可以设置颜色的透明度。

int imagecolorallocatealpha(resource $image, int $red,int $green,int $blue,int $alpha)

$alpha参数用于设置颜色的透明度,其值从0到127。0表示完全不透明,127表示完全透明。

2.复制图片的一部分

使用imagecopy()函数能够复制图片的一部分到另一个图片。

bool imagecopy(resource $dst_im,resource $src_im,int $dst_x,int $dst_y,int $src_x,int $src_y,int $src_w,int $src_h)

将$src_im中坐标从($src_x,$src_y)开始,宽度为$src_w,高度为$src_h的一部分复制到$dst_im中坐标为($dst_x,$dst_y)的位置上。

3.复制图片并调整大小

使用imagecopyresized()函数也可以实现imagecopy()函数的功能,并可以对复制的图片大小进行调整。

bool imagecopyresized(resource $dst_image,resource $src_image,int $dst_x,int $dst_y,int $src_x,int $src_y,int $dst_w,int $dst_h,int $src_w,int $src_h)

$dst_w和$dst_h这两个参数表示将复制的图片宽度和高度分别调整为$dst_w和$dst_h,即实现了图片的缩放功能。

imagesx()和imagesy()函数的作用是获取一个图像的宽度和高度,他们的参数是已经创建的图像句柄。

4.旋转图像

使用imagerotate()函数可以将图像旋转给定角度

resource imagerotate(resource $src_im,float $angle,int $bgd_color[,int $ignore_transparent])

参数$src_im是给定的图像,$angle是指定的旋转角度,$bgd_color指定了旋转后没有覆盖到的部分的颜色。旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小,边缘不会被剪去。可选参数$ignore_transparent若被设为非零值,则透明色会被忽略(否则会被保留)。

四、其他的图形函数

1.取得图形信息

getimagesize()函数可以获取指定图形的尺寸、宽度、高度和类型等信息。该函数将这些信息以数组的形式返回,如果图片指定的图形不是有效的文件,则返回FALSE。

2.设定画线

使用imagesetthickness()函数可以设置画几何图形时画线的宽度。

bool imagesetthickness(resource $image,int $thickness)

该函数将画线宽度设为$thickness个像素。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消