资源预览内容
第1页 / 共61页
第2页 / 共61页
第3页 / 共61页
第4页 / 共61页
第5页 / 共61页
第6页 / 共61页
第7页 / 共61页
第8页 / 共61页
第9页 / 共61页
第10页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第 10章 图像处理 PHP不仅可以用来处理文字 ,而且支持很多种图像格式的处理。我们不仅可以处理已经存在的图片,而且可以自己画出一幅图。在网站中,有大量的图片需要由网站动态生成,如验证码图片,水印图片。 PHP提供了 GD库,可以很轻松实现这些功能。本章将详细讲解图像绘制以及简易图片处理的知识。10.1 处理图像前的准备 在进行本节知识的讲解前,读者需要做一些必要的环境配置以及通用的图像知识,例如图像中的坐标系统等。读者只有配置好环境,以及了解必要的图像知识后,才可以轻松地理解和使用图像绘制相关的函数。10.1.1 加载 GD库 GD库是 PHP的图形扩展库。所谓扩展就是非必须的, PHP不使用它也不会出现问题,但是使用它可以使一些工作更加容易。例如我们的图像处理。 GD库已经成为 PHP默认安装的库,省去了我们进行安装。但是默认情况下 GD库是没有加载的,我们需要通过配置 PHP配置文件来加载。需要修改 php.ini文件的如下设置: extension=php_gd2.dll 我们需要做的就是将其前面的注释符号( ;)去掉即可,然后重启服务器即可正确加载。当然由于我们使用的是集成开发环境,该扩展库已经默认被加载了。我们可以通过phpinfo或者 gd_info函数来获取当前使用的 GD库信息。10.1.1 加载 GD库 【 示例 10-1】 以下代码演示使用 gd_info函数获取当前GD库的信息。 从运行结果我们可以看出,该函数返回的数组显示了已经加载的 GD版本以及对图像格式的支持情况。如果GD库没有被正确加载是不会出现这些信息的。读者可以以此来判断 GD库的加载情况。10.1.2 指定正确的 MIME类型 MIME是多用途 Internet邮件扩展的缩写。现在它可以说是Internet内容类型描述的事实标准。 PHP默认的 MIME类型是“text/html”,这在 PHP配置文件中可以设置。 Web服务器在发送被请求内容到浏览器之前会首先发送一个文件头。我们就可以通过设置这个文件头来使浏览器正确识别图像。这里需要使用到的函数是 header函数,它的原型如下: void header ( string $string , bool $replace = true , int $http_response_code ) 参数 string为要发送的报头字符串;可选参数 replace用来规定是否替换原来的报头;可选参数 http_response_code用来指定 HTTP的响应代码。我们在输出图像的时候只需设置报头中 “Content-Type”的内容。常用的图像 MIME类型如表所示。10.1.2 指定正确的 MIME类型 例如,我们可以使用如下的代码让浏览器来以 png格式的要求解析请求: header(Content-Type:image/png) 需要注意的是在设置的头文件输出前不可以有任何字符的输出否则会导致图像无法显示。图 像 类 型 MIME表示JPEG文件可交 换 格式( .jpeg/.jpg) image/jpeg可移植网 络图 像( .png) image/png可交 换图 像格式( .gif) image/gifWindows位 图 ( .bmp) image/bmp10.1.3 通用图像知识 在图像处理的过程中,坐标系统占有非常重要的地位,如果不能熟练的掌握坐标系统,那么在使用图像处理函数的时候会非常吃力。1.图像坐标 通常情况下图像的坐标系统与我们数学中使用的坐标系统是不同的。图像的坐标系统如图所示。1.图像坐标 图片尺寸通常使用像素来表示,单位为 px。假设我们上面的定义的图片为 200*300像素。那么它的宽度就是 200px,高度就是 300px。那么它的一些常用的坐标如图 10.3所示。 在进行简单 绘画 的时候,坐标的掌握是非常重要的。只有非常熟练地掌握坐标系统,才能画出自己满意的效果。2.角度系统 角度在图形图像处理中常用在画弧线或者旋转图像之用。在编程领域通常使用的角度系统如图所示。 也就是说, 0在 3点钟的位置,角度依次按照顺时针方向增加。3.绘制椭圆 在绘制椭圆的时候不存在半径参数。因此我们也需要了解一下画椭圆时候需要使用到参数。它的形式如图所示。3.绘制椭圆 一般在电脑中绘制椭圆时,认为椭圆是与相对应的矩形相切的,矩形的长即为椭圆的长轴的长度,矩形的宽即为椭圆的短轴长度。所以通过矩形可以更好的理解椭圆的绘制,确定了矩形的位置及大小就可以确定椭圆的位置及大小。在不使用半径的情况下,在一个矩形的区域中想要定位一个椭圆就是比较使初学者困惑的。例如很多想要完成一个如图所示的图像并不会非常容易。3.绘制椭圆 想要画出图中所示的图像的难点就在于椭圆圆心的确定。因此以上介绍的这些知识都是有相当必要去掌握的。4.RGB色彩模式 在图像处理的过程中我们主要使用的色彩模式为 RGB模式。 RGB即分别代表红( red)、绿( green)和蓝( blue)三种颜色。这种模式使用 RGB模型为图像中每一个像素的RGB分量分配一个 0255范围内的强度值。也就是说我们需要分别指定这三种颜色在一个像素点中的值。这些值可以为 0255中的一个或者其十六进制表示,如表所示。色彩 RGB值白色 ( 255,255,255)或者 “#FFFFFF”黑色 ( 0,0,0)或者 “#000000”红 色 ( 255,0,0)或者 “#FF0000”绿 色 ( 0,255,0)或者 “#00FF00”蓝 色 ( 0,0,255)或者 “#0000FF”10.2 图像绘制 经过上一小节的学习,基础的准备工作我们已经介绍完毕了。接下来就回到我们 PHP知识的学习中。本小节将会从创建画布开始介绍图像绘制的所有步骤。10.2.1 输出图像的三个步骤 同现实中绘画类似,在绘画之前 需要 有一张 “画布 ”然后我们在上面作画。在编程中,图像的输出通常需要四个步骤,分别为 创建画布、绘制图像、输出图像和清除图像。下面我们就首先介绍绘制图像之外的三个步骤。1.创建空画布 PHP中创建画空白布使用 imagecreate和 imagecreatetruecolor来创建,这两个函数的区别是 imagecreate函数会创建一个基于调色板的图像,可以显示的色彩数通常为 256色;而 imagecreatetruecolor函数会创建一个真彩色的图像,通常可以显示 16777216种颜色,官方推荐使用 imagecreatetruecolor函数。但是 imagecreatetruecolor函数不支持 GIF格式的图像。这两个函数的原型如下: resource imagecreate ( int $x_size , int $y_size ) resource imagecreatetruecolor ( int $x_size , int $y_size ) 参数 x_size即为需要创建的画布的宽度;参数 y_size为需要创建的画布的高度。这两个函数会返回一个资源以供后续的操作使用。 注意:虽然 imagecreate和 imagecreatetruecolor函数都会创建一个空画布,但是默认情况下 imagecreate函数会创建一个空白的画布,而 imagecreatetruecolor则会创建出一个黑色的画布。2.创建基于文件或 URL的画布 创建一个基于文件或 URL的画布就类似于我们将一张图像作为背景然后在上面作画。由于 PHP支持多种格式的图像类型,因此有多个函数用来创建不同文件格式的画布。常用的基于文件或 URL创建画布的函数原型如下: resource imagecreatefromgif ( string $filename ) resource imagecreatefromjpeg ( string $filename ) resource imagecreatefrompng ( string $filename ) 参数 filename为文件名或者 URL。这三个函数的返回值同样为资源类型。3.输出图像 同创建画布类似的,由于 PHP支持多种图像类型,因此也有多个函数用来输出对应格式的图像。常用的输出图像的函数原型如下: bool imagegif ( resource $image , string $filename ) bool imagejpeg ( resource $image , string $filename , int $quality ) bool imagepng ( resource $image , string $filename ) 参数 image为创建画布的函数返回的资源;可选参数filename用来规定是否以文件的形式保存而不直接输出。imagejpeg函数的可选参数 quality用来设置输出图像的质量,范围可为 0100,默认大约为 75。4.清除图像资源 在图像输出后,就需要清除图像来释放资源,就类似于关闭文件句柄。清除图像使用的函数为 imagedestroy,它的原型如下: bool imagedestroy ( resource $image ) 参数 image即为创建画布函数返回的资源。下面我们就来演示从创建画布到清除图像的整个流程以及执行的效果。4.清除图像资源 【 示例 10-2】 演示使用 imagecreatetruecolor函数创建一个空画布并输出。 从运行结果我们可以看出,使用 imagecreatetruecolor函数会创建出一个黑色的画布。下面我们就来演示基于文件来创建一个画布。 【 示例 10-3】 演示使用 iamgecreatefromjpeg函数创建一个基于文件的画布并输出。 注意:在进行图像处理的时候自定义的报头、创建画布的函数和输出图像的函数都要一致。例如创建的画布为 png格式,那么发送的报头就必须为 “Content-Type:image/png”,而且输出函数也必须使用 imagepng函数。 【 示例 10-4】 演示使用 imagecreatefrompng函数创建一个基于 URL的画布并将其保存。 运行结果已经提示我们图像已经被保存,我们可以通过查看目录来确认。10.2.2 定义颜色 在创建了画布后,我们现在还不可以绘画,因为我们现在还没有创建颜色,这就类似于作画前调色的过程。定义颜色可以使用imagecolorallocate和 imagecolorallocatealpha函数,它们的原型如下: int imagecolorallocate ( resource $image , int $red , int $green , int $blue ) int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha ) 参数 image为创建画布函数返回的资源;参数 reb、 green、 blue分别用来定义 RGB色的成分。 imagecolorallocatealpha函数中的参数alpha用来规定颜色的透明度,可以的值为 0127, 0表示完全不透明, 127表示完全透明。 注意: imagecolorallocate和 imagecolorallocatealpha函数第一次定义的颜色会作为 imagecreate函数创建的画布的背景色。10.2.
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号