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中,可以动态绘制完图像,然后利用函数直接生成GIF,JPEG,PNG和WBMP格式的图像。
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():拷贝图像的一部分。
原理:复制图像的原理就是复制图像的每一个像素点,然后将其置于新图像相反的位置
浙公网安备 33010602011771号