|
学完了正则表达式(PHP从入门到精通—正则表达式—初识正则表达式、正则表达式语法规则、相关函数、常见应用、用法自查表),下面开始讲解PHP图像处理技术,在Web项目开发中,经常遇到这样的需求:如用户登录的时候,需要动态的生成一张验证码或者需要对图片添加水印,又或者打上自己的Logo等,这些都需要使用到图像处理技术。本文将针对PHP图像处理技术进行详细地讲解。
在PHP中加载GD库
GD库是PHP处理图像的扩展库,提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片添加水印。GD库可以从官方网站http://www.boutell.com/gd下载。目前,GD库支持GIF、PNG、JPEG、WBMP和XMB等多种图像格式。
Windows操作系统下,GD库在PHP7中是默认安装的,但必须激活GD库。此时只需要打开php.ini文件,将文件中“;extension = php_gd2.dll”选项前的分号“;”去掉,如图所示,保存修改后的文件并重新启动Apache服务器即可启动GD函数库。
另外,值得注意的是,如果使用的是PHP集成开发环境(如phpStudy、WampServer等),就不必担心这个问题,因为在集成开发环境下,默认GD函数库已经被加载。
接下来演示验证GD库加载成功的方法,在“D:\wamp64\www\section09”目录下新建test.php文件并在文件中写入以下代码:
接下来,在浏览器地址栏中输入localhost/section09/test.php,按下Enter键,进入显示GD库安装信息的页面,如图所示,这说明GD库安装成功。
常见图像格式
图像格式是计算机存储图片的格式,下面简要介绍一下在PHP中可以处理的常见图像格式。
1.GIF
GIF是图形文件格式(Graphics Interchange Format)的缩写,它是无损压缩格式,广泛用于网络,用来存储包含文本、直线和单块颜色的图像。GIF使用LZW无损数据压缩技术进行压缩,这样既减少了文件大小,又不会降低可视质量。
2.JPEG
JPEG是联合图像专家小组(Join Photographic Experts Group)的缩写,它是目前网络上最流行的图像格式,文件扩展名为jpg或jpeg。 JPEG压缩后可以保留基本的图像和颜色的层次,所以人眼可以忍受这些图像质量的损失。正是这个原因,JPEG格式不适合绘制线条、文本或颜色块等较为简单的图片。
3.PNG
PNG是可以移植的网络图像(Portable Network Graphics)的缩写,它可以看作是GIF格式的替代品。PNG网站将其描述为“一种强壮的图像格式”,并且是无损压缩。由于它是无损压缩,所以该图像格式适合包含文本、直线和单块颜色的图像,如网站LOGO和各种按钮。
4.WBMP
WBMP是无线位图(Wireless Bitmap)的缩写,它是专门为无线通信设备设计的文件格式,但是并没有得到广泛应用。
JpGraph图表库
在Web开发中,经常需要以图表的形式来展示数据的统计结果。JpGraph提供了多种方法创建各种统计图,包括折线图、柱形图和饼状图等。本节将针对JpGraph图表库进行详细地介绍。
1. JpGraph简介
JpGraph是一个用于图形图像绘制的类库。以前用PHP作图时必须掌握复制抽象的画图函数,或者借助一些网上下载的柱形图、饼形图类来实现,没有一个统一的图表类来实现图表的快速开发。而现如今,JpGraph能够很容易地集成到PHP应用程序中。下面是一些使用JpGraph绘制的图表,如图所示。
从图中可以看出,使用JpGraph库以绘制出各种各样的图表,可以清晰明了的显示数据。
2.安装 JpGraph
JpGraph目前最新版本是4.2.0,同时支持PHP5和PHP7,可以在官网http://jpgraph.net/download/上进行下载,下载的页面如图所示。
单击下载页面中的jpgraph-4.2.0.tar.gz进行下载。下载成功后,解压文件可以看到JpGraph文件的目录结构,具体如图所示。
从图中可以看出,JpGraph由两个文件夹和一个文件组成,其中docs文件夹是使用文档,src文件夹是源文件夹,VERSION是版权声明。在使用JpGraph之前,可以根据实际需求对JpGraph文件进行配置,具体如下:
l 将src文件夹保存到默认站点目录下,并重命名为JpGraph,编辑php.ini文件,修改include_path配置项,在该项后增加JpGraph库的保存目录,如include_path=“.;默认站点目录\JpGraph”,重启服务器,配置生效。
l 直接将上述src文件夹复制到项目目录下,并重命名为JpGraph即可。
需要注意的是,在使用JpGraph图表库开发程序时,必须确保PHP配置文件php.ini中开启了GD库扩展。
PHP绘图的基本步骤
了解PHP图像处理的基础知识后,接着就需要学习PHP绘图的基本步骤,例如,创建画布、设置颜色、生成图像、释放资源等,PHP提供了相应函数来完成绘图的基本步骤,本节主要讲解这些函数的使用。
创建画布
创建图像资源首先要创建一张画布,正如绘画需要画纸一样,在没有任何素材基础上绘画时,首先要创建画布,所有的绘画都需要在画布上进行。在GD函数库中创建画布,可以通过imagecreate()函数来实现。除此以外,在PHP的GD库函数库中提供了专门与创建画布相关的函数,具体如表所示。
预定 函数声明 | 用法说明 | resource imagecreate(int $x_size,int $y_size) | 创建一幅大小为$x_size、$y_size的空白图形,单位为像素,通常背景为黑色,它只能支持256色 | resource imagecreatetruecolor(int $x_size,int $y_size) | 创建一幅大小为$x_size、$y_size的空白图形,单位为像素,可以创建一个真彩色,它支持的色彩比较丰富,但不支持GIF格式 |
设置颜色
现实生活中,单一的颜色并不能满足人们的审美需求。PHP在绘制图像时,同样也离不开颜色的设置。PHP提供了imagecolorallocate()函数设置颜色,该函数的声明方式如下所示:
在上述声明中,$image是由图像创建函数返回的图像标识符,$red,$green,$blue分别是颜色的红、绿、蓝成分,这些参数是0到255的整数或者十六进制的0x00~0xFF。
生成图像
使用GD库中提供的函数动态绘制完成图像以后,就需要输出到浏览器或者将图像保存起来。在PHP中,可以将动态绘制完成的画布,直接生成GIF、JPEG、PNG和WBMP4种图像格式。以下是PHP生成图像相关的函数,具体如表所示。
预定 函数声明 | 用法说明 | imagegif(resource $image[,string $filename]) | 从$image图像以$filename为文件名创建一个gif图像 | imagepng(resource $image[,string $filename]) | 从$image图像以$filename为文件名创建一个png图像 | imagejpeg(resource $image[,string $filename[,int $quality]]) | 从$image图像以$filename为文件名创建一个jpeg图像 | imagewbmp(resource $image[,string $filename[,int $foreground]]) | 从$image图像以$filename为文件名创建一个wbmp图像 |
以上4个函数的声明方式类似,前两个参数类型是相同的。第一个参数$image为必选项,是前面介绍的创建一个图像资源。如果不为这些函数提供其他的参数,访问时则直接将原图像流输出,并在浏览器中显示输出的图像。需要注意的是,当使用这些函数输出图形之前,需要使用header()函数发送HTTP头消息给浏览器,让其知道发送的是图片而不是文本的HTML。
释放资源
图像被输出以后,画布中的内容也不再有用。出于节约系统资源的考虑,需要及时清除画布占用的所有内存资源。PHP提供了imagedestroy ()函数释放资源,该函数的声明方式如下所示:
bool imagedestroy ( resource $image )
在上述声明中,$image是由图像创建函数返回的图像标识符。
PHP图像处理的常见应用
10.3 PHP图像处理的常见工具
在PHP中绘制图像的函数非常丰富,包括点、直线、矩形、圆等都可以通过PHP中提供的各种画图函数完成。这些图像绘制函数都需要使用画布资源,在画布中的位置是通过坐标(原点是该画布左上角的起始位置,以像素为单位,沿着X轴正方向向右延伸,Y轴正方向向下延伸)来决定,而且还可以通过函数中的最后一个参数设置每个图形的颜色。画布中的坐标体系如图所示。
在绘制图像时,无论多么复杂的图形都离不开一些基本的图形,如,点、直线、圆等。只有掌握了这些最基本图形的绘制方式,才能绘制出各种独特风格的图形。在GD函数库中,提供了许多绘制基本图形的函数,具体如表所示。
制作水印图
为图片添加水印的目的,是为了保护图片版权、防止图片在未经授权的情况下被肆意使用。有了制作水印的图像处理技术,可以有效地防止图片被滥用、盗用的问题。
在PHP程序中,添加水印的应用场景一般出现在用户上传头像时,有的需要在上面加上水印。水印可以分为文字水印和图片水印。在PHP的GD库函数库中提供了专门制作水印的相关函数,具体如表所示。
函数声明 | 用法说明 | resource imagecreatefromgif(string $filename) | 将图片载入到程序 | array getimagesize(string $filename[,array $imageinfo]) | 用于获取图片的大小 | bool imagecopy(resource $dst_img,resource $src_img,int $dst_x,int $dst_y,int $src_x,int $src_y,int $src_w,int $src_h) | 用于复制图片 | 图片水印就是将一张图片加在另外一张图片上,主要使用GD函数库中的imagecopy()和imagecopymerge()两个函数一起来完成。
给目标图片添加图片水印的实现思路如下:
确定背景图和水印图,利用这两个图片创建两个图像资源;
确定水印图片的左顶点的坐标(X,Y);
确定好各项参数后,把水印图片和背景图片合在一起;
把水印加在背景图上后,输出图像,并将修改后的图片保存到指定目录中。
制作验证码
验证码是Completely Automated Public Turing test to tell Computers and Humans Apart (CAPTCHA,全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人类的公共安全的自动程序,它可以有效防止网络粗暴行为,例如,恶意破解密码、注册、刷票、论坛灌水等。
接下来演示验证码的制作过程,具体如下:
(1)封装一个验证码类(Captcha.class.php),用于生成一张图片或一组随机字符串。
(2)编写测试脚本TestCaptcha.php。
(3)写一个处理前台输入的PHP脚本,判断输入结果是否正确的文件(Captcha.php)。
(4)编写一个模拟用户登录时输入验证码的html文件(Login.html)。
小结:PHP图像处理技术—PHP图像基础知识、PHP绘图的基本步骤、PHP图像处理的常见应用
首先介绍了PHP绘图技术的基础知识,例如,介绍了如何在PHP中加载GD库,介绍了几种常见的图片格式,以及JpGraph的安装和配置。接着介绍了PHP绘图的四个基本步骤和PHP图像处理相关的常见应用案例。通过本章的学习,大家应该熟练掌握PHP绘图的基本步骤,重点掌握如何使用PHP绘图技术制作验证码。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|