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个像素。

时间: 2024-10-24 21:03:50

PHP中图像处理简介的相关文章

WPF中的图像处理简介

原文:WPF中的图像处理简介 和Winform中的GDI+相比,WPF提供了一组新的API用于显示和编辑图像.新API特点如下: 适用于新的或专用图像格式的扩展性模型. 对包括位图 (BMP).联合图像专家组 (JPEG).可移植网络图形 (PNG).标记图像文件格式 (TIFF).Microsoft Windows Media 照片.图形交换格式 (GIF) 和图标 (.ico) 在内的本机图像格式增强了性能和安全性. 高位深图像数据的保留最多 32 位/通道. 非破坏性图像缩放.裁切和旋转.

Cache基本知识与OR1200中ICache简介

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 12.1 Cache基本知识 12.1.1 Cache的作用 处理器的设计者一般会声称其设计的处理器一秒钟能做多少次乘法.每条指令只占用xx个时钟周期,可是当我们实际使用处理器时,就会发现并不是那么回事,比如在第11章,从图11.8中可以发现,当程序运行在简单SOPC上时,原先设计在执行阶段只需要一个时钟周期的指令l.movhi却使用了6个时钟周期才完成执行,造成实际情况与设计不符的原因是由于实际情况是一个由多个模块.设备组成的系统,读者

Spring中AOP简介与使用

Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操做.即通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 为什么要用AOP? 日志记录,性能统计,安全控制,事务处理,异常处理等等.例如日志记录,在程序运行的某些节点上添加记录执行操作状态的一些代码,获取执行情况.而通过切面编程,我们将这些插入的内容分离出来,将它们独立

OSGI中blueprint简介

OSGI中blueprint简介 上篇博文我们开始了felix中的一个example编写,原本计划是讲felix中的几个example全部编写一遍,但是随后发现felix的这几个example都差不多,只是略微有些区别,编写来编写去始终都是这几行代码,讲起来也没什么意思,想着还是开始osgi中新的东西的讲解,思考来去,还是从blueprint开始. blueprint简介 在osgi中服务的使用有多种方式,如使用传统的注册式服务,就是我们之前中example不断使用的使用方式,还是osgi中的声

SpringMVC 中HttpMessageConverter简介和Http请求415 Unsupported Media Type的问题

一.概述: 本文介绍且记录如何解决在SpringMVC 中遇到415 Unsupported Media Type 的问题,并且顺便介绍Spring MVC的HTTP请求信息转换器HttpMessageConverter. 二.问题描述: 在SprinvMVC的Web程序中,我在页面发送Ajax 的POST请求,然后在服务器端利用@requestBody接收请求body中的参数,当时运行过程中,我想服务器发送Ajax请求,浏览器一直反馈415 Unsupported Media Type或者40

IOS中 Block简介与用法(一)

?Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是"^",接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal.行为主体可以用return回传值,类型会被compiler自动辨别.如果没有参数列要写成: ^(void). 例如下面的一个例子: [cpp] vi

.Net Core MVC中过滤器简介

原文:.Net Core MVC中过滤器简介 在.Net Framework MVC 中有四种过滤器,授权过滤器(Authorize).Action 过滤器.结果过滤器(Result).异常过滤器(Exception)四种过滤器.在.Net Core MVC中,有五种过滤器,授权过滤器.Action过滤器.异常过滤器.结果过滤器.资源过滤器,新增了资源过滤器. .Net Core MVC和.Net Framework MVC在基本使用上差别不大,主要的还是框架的差别.其中路由是个很重要的东西,参

MATLAB中图像处理的一些简单函数

A. imreadimread函数用于读入各种图像文件,其一般的用法为[X,MAP]=imread('filename','fmt')其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径).例:[X,MAP]=imread('flowers.tif','tif');比较读取二值图像,灰度图像,索引图像,彩色图像的X和MAP的特点,可以利用size函数用来显示数组的维数,了解数据的特点.B=size(a) 返回数组a 的维数.

matlab中图像处理常见用法

一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:/w01.tif') 注:计算机E盘上要有w01相应的.tif文件. 2. imwrite imwrite函数用于写入图像文件,如:imwrite(a,'e:/w02.tif',’tif’) 3. imfinfo imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:/w01.tif') 二. 图像的显示 1. image image函数是MATLAB提供的最原始的图像显示