PHP动态图像处理

PHP中的GD库的使用

PHP中,通过GD库处理图像,大致的形式就是现在内容里面生成图像, 然后绘制图像,最后输出到浏览器或者将其保存到服务器的磁盘上。

 

创建一个图片大致的步骤如下:

1.创建画布

所有的绘图都需要在一个画布上面进行绘制。所谓创建画布,事实上就是在内存里面开辟一个区域,用来存储图像的信息的

2.绘制图像

画布创建完之后,可以通过这个画布资源,使用各种画像函数来设置图像的颜色,填充画布,画点,画线,添加文本等

3.输出图像

完成整个图像的绘制以后,需要将图像以某种格式保存到服务器指定的下面,或者将其直接输出到浏览器上面,不需要保存。在输出图像之前,一定要使用header()函数来设置MIME信息,通知浏览器这次发送的是上面文件

4.释放资源

图像被输出以后,画布中的内容也就没用了,所以我们需要释放所占有的资源,节约内容

关于使用PHP动态生成图像,一般不会用来生成很复杂的图片。一般就是用来生成简单的图片:验证码,给图片加水印

 

 

创建画布

如果想要动态绘制图像,首先就必须要有画布。创建画布的过程事实上就是在内存中开辟一个区域。

PHP里面创建画布有两个函数:

imagecreate(宽,高):新建一幅指定宽高的基于调色板的画布

imagecreatetruecolor(宽,高):新建一幅真彩色的画布

两个函数创建的画布基本上是一样的,唯一的区别在于容纳颜色的数量不一样。真彩色所能容纳的颜色总数要多一些。但是真彩色也有一个缺点:不能用于GIF文件格式

 

可以通过imagesx()imagesy():获取图像的宽和高

 

当我们绘画结束时,图像资源需要释放掉,用于节约内存

 

PHP也为我们提供了函数 imagedestory():用于销毁图像资源

 

 

绘制图像

在绘制图像之前,我们需要创建颜色,然后才能通过相应的颜色进行绘画。这里创建颜色我们可以理解为创建颜料的过程,需要什么颜色,就创建什么颜色即可。

PHP里面创建颜色的函数为:

imagecolorallocate(图像资源,红值,绿值,蓝值)

 

这里关于颜色的值也可以使用十六进制

 

关于图像的格式

这里先来介绍一下图像的格式:

(1) GIF

中文名叫做:图形文件交换格式(Graphics Interchange Format).该格式是一种无损的压缩格式,该格式的缺点是支持的颜色较少,但是有一个优点:可以制作动画

(2) JPEG

翻译成中文为:联合图像专家组(Joint Photographic Expert Group)。该格式的文件扩展名一般为jpeg或者jpg

该格式的优点在于能够存储颜色丰富的色彩和色彩层次的图像。该格式使用了有损压缩,但是压损的程度人眼是可以忍受的。Jpg不适合绘制像线条,文本,颜色这些较为简单的图片

(3) PNG

翻译成中文:可移植网络图像,首先该格式的图像使用的是无损压缩。该格式就比较适合绘制像线条,文本,颜色这些较为简单的图片

PNG还有一个最大的优点,支持透明

(4) WBMP

翻译成中文为无线位图,是专门为无线通信设备设计的格式,但是并没有得到广泛的使用

 

总结:GIF的优点在于可以制作动画图片,JPEG的优点在于颜色丰富,PNG的优点在于支持透明色

 

 

图像的输出

PHP中,可以动态绘制完图像,然后利用函数直接生成GIFJPEGPNGWBMP格式的图像。

imagegif(图像资源,[输出文件])

imagejpeg(图像资源,[输出文件,品质])

imagepng (图像资源,[输出文件])

imagewbmp(图像资源,[输出文件,前景色])

如果第二参数填写了,则保存在填写的路径下面,如果没有填写第二个参数,则直接向浏览器输出。

如果是向浏览器输出,需要写一个header()函数来告诉浏览器这是一张图片,而不是HTML

 

 

具体的绘制图形

图像区域的填充

imagefill(图像资源,横坐标,纵坐标,颜色)

如果没有填充画布,那么默认会以第一个颜色来填充画布

 

绘制点和线

绘制点的函数:imagesetpixel(图像资源,横坐标,纵坐标,颜色)

 

绘制线也有函数:imageline(图像资源,第一个点的横坐标,第一个点的纵坐标,第二个点的横坐标,第二点的纵坐标,颜色)

 

 

绘制矩形

PHP里面绘制矩形也提供两个函数:

Imagerectangle(图像资源,第一个点的横坐标,第一点的纵坐标,第二点的横坐标,第二点的纵坐标,颜色)

 

Imagefilledrectangle(图像资源,第一个点的横坐标,第一点的纵坐标,第二点的横坐标,第二点的纵坐标,颜色)

 

 

绘制多边形

PHP中提供了绘制多边形的函数

Imagepolygon(图像资源,一个数组[该数组里面装的是各个点的坐标],顶点的总数,颜色)

Imagefilledpolygon(图像资源,一个数组[该数组里面装的是各个点的坐标],顶点的总数,颜色)

 

 

绘制椭圆

PHP中提供了相应的函数

Imageellipse(图像资源,椭圆圆形的横坐标,椭圆圆心的纵坐标,椭圆的宽,椭圆的高,颜色)

Imagefilledellipse(图像资源,椭圆圆形的横坐标,椭圆圆心的纵坐标,椭圆的宽,椭圆的高,颜色)

 

 

绘制弧形

绘制弧形是在绘制椭圆的基础上添加角度就可以了

PHP里面对应的函数:

imagearc(图像资源,弧形中心点的横坐标,弧形中心点的纵坐标,弧形的宽,弧形的高,起始角度,结束角度,颜色)

 

填充弧形的函数:

 

imagefilledarc(图像资源,弧形中心点的横坐标,弧形中心点的纵坐标,弧形的宽,弧形的高,起始角度,结束角度,颜色,风格)

 

风格的值是一组常量值,对应有4个:

 

IMG_ARC_PIE

 

IMG_ARC_CHORD
IMG_ARC_NOFILL
IMG_ARC_EDGED

 

 

 

 

 

 

 

 

 

绘制文字

PHP里面绘制文字给我们提供了4个函数

画字符串2

Imagestring(图像资源,文字的大小[但是这个大小是定死了的,1-5],横坐标,纵坐标,字符串,颜色)

 

Imagestringup(图像资源,文字的大小[但是这个大小是定死了的,1-5],横坐标,纵坐标,字符串,颜色)

 

画字符2

 

Imagechar(图像资源,文字的大小[但是这个大小是定死了的,1-5],横坐标,纵坐标,字符,颜色)

 

Imagecharup(图像资源,文字的大小[但是这个大小是定死了的,1-5],横坐标,纵坐标,字符,颜色)

 

 

PHP图片处理

图片背景的管理

所谓图片背景,就是将一张图片作为画布的背景

PHP给我们提供了

Imagecreatefrompng(图片的路径)

Imagecreatefromjpeg(图片的路径)

Imagecreatefromgif(图片的路径)

Imagecreatefromwbmp(图片的路径)

 

 

getimagesize(图片所在的路径):获取图片的大小,类型等相关信息

 

 

图片的缩放

所谓图片的缩放,就是将上传到网站的大图片自动缩小为小图片,以便减少存储空间,提高下载和浏览的速度。

PHP里面提供了一个函数imagecopyresampled(目标图像资源,源图像资源,目标图像x坐标点,目标图像y坐标点,源图像x坐标,源图像y坐标,目标的宽度,目标的高度,源图像宽度,源图像高度)

 

 

图片的裁剪

 

所谓图片的裁剪,就是截取图片的某一个部分。图片的裁剪也是通过imagecopyresampled来实现的

imagecopyresampled(目标图像资源,源图像资源,目标图像x坐标点,目标图像y坐标点,源图像x坐标,源图像y坐标,目标的宽度,目标的高度,源图像宽度,源图像高度)

 

 

图片的旋转与翻转

旋转:图片的旋转直接借助imagerotate函数就可以实现

 

图像的翻转

 

图像的翻转同样是通过imagecopy()函数来实现的。

 

imagecopy():拷贝图像的一部分。

 

原理:复制图像的原理就是复制图像的每一个像素点,然后将其置于新图像相反的位置

 

posted @ 2017-08-19 14:30  Lexone  阅读(233)  评论(0)    收藏  举报