1. 创建与绘制图像

例:create_img.php

<?php

php调用外部图片PHP GD函数库处置图像 Ruby

header(\"大众Content-type:image/gif\公众);//向客户端发送原始的 HTTP 报头。
Content-type:image/gif

$image = imagecreate(100,100);//创建100100像素的画布资源

$blue = imagecolorallocate($image,0,0,255);//为$image画布设置图像颜色 蓝色

imagefill($image,0,0,$blue);//在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色实行区域添补

imagegif($image);//输出图象到浏览器或文件。

imagedestroy($image);//销毁一图像

?>

结果:

补充

1)header

定义和用法

header() 函数向客户端发送原始的 HTTP 报头。

认识到一点很主要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以利用输出缓存来办理此问题):

语法

header(string,replace,http_response_code)

参数描述

string必需。
规定要发送的报头字符串。

replace

可选。
指示该报头是否更换之前的报头,或添加第二个报头。

默认是 true(更换)。
false(许可相同类型的多个报头)。

http_response_code可选。
把 HTTP 相应代码逼迫为指定的值。
(PHP 4 以及更高版本可用)

2)imagecreate

如果我们要对图像进行处理,就如其它图像处理软件一样,须要创建一块画布。
imagecreate() 和 imagecreatetruecolor() 函数用于创建一幅空缺图像。

语法:

  resource imagecreate( int x, int y )

参数 x ,y 分别为要创建图像的宽度和高度像素值,返回一个图像资源。

3)imagecolorallocate

设置图像的颜色,须要调用imagecolorallocate()函数完成。
如果在图像中须要设置多种颜色,只要多次调用该函数即可。
该函数的原型如下所示:

复制代码 代码如下:

int imagecolorallocate(resource $image,int $red,int $green,int $blue) //为一幅图分配颜色

该函数会返回一个标识符,代表了由给定的RGB身分组成的颜色。
参数$red、$green和$blue分别是所须要的颜色的红、绿蓝身分。
这些参数是0到255的整数或者十六进制的0×00到0xFF。
第1个参数$image是画布图像的句柄,该函数必须调用$image所代表的图像中的颜色。
但要把稳,如果是利用imagecreate()函数建立的画布,则第一次对imagecolorallocate()函数的调用,会给基于调色板的图像添补背景色。

4)imagefill

imagefill — 区域添补

解释

imagefill ( resource $image , int $x , int $y , int $color ) : bool

imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色实行区域添补(即与 x, y 点颜色相同且相邻的点都会被添补)。

5)imagegif

imagegif — 输出图象到浏览器或文件。

解释

imagegif ( resource $image [, string $filename ] ) : bool

imagegif() 从 image 图像以 filename 为文件名创建一个 GIF 图像。
image 参数是 imagecreate() 或 imagecreatefrom 函数的返回值。

图像格式为 GIF87a。
如果用了 imagecolortransparent() 使图像为透明,则其格式为 GIF89a。

6)imagedestroy

imagedestroy — 销毁一图像

解释

bool imagedestroy ( resource $image )

imagedestroy() 开释与 image 关联的内存。
image 是由图像创建函数返回的图像标识符,例如 imagecreatetruecolor() 。

例:绘制圆弧

arc.php

<?php

header(\"大众Content-type:image/jpg\公众);//向客户端发送原始的 HTTP 报头。
Content-type:image/jpg

$im = imagecreate(200,200);//创建200200像素的画布资源

$white = imagecolorallocate($im,255,255,255);//为$image画布设置图像颜色 白色

$blue = imagecolorallocate($im,0,0,255);//为$image画布设置图像颜色 蓝色

imagearc($im,100,100,150,150,0,360,$blue);//用于画椭圆弧

imagejpeg($im);//以 JPEG 格式将图像输出到浏览器或文件

imagedestroy($im);//销毁一图像

?>

结果:

补充

1)imagearc

imagearc — 用于画椭圆弧。

语法

bool imagearc ( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color )

imagearc() 以 cx,cy(图像左上角为 0, 0)为中央在 image 所代表的图像中画一个椭圆弧。

w 和 h 分别指定了椭圆的宽度和高度,起始和结束点以 s 和 e 参数以角度指定。
0°位于三点钟位置,以顺时针方向绘画。

2)imagejpeg

imagejpeg -- 以 JPEG 格式将图像输出到浏览器或文件

解释

bool imagejpeg ( resource image [, string filename [, int quality]] )

imagejpeg() 从 image 图像以 filename 为文件名创建一个 JPEG 图像。
image 参数是 imagecreatetruecolor() 函数的返回值。

filename 参数为可选,如果省略,则原始图像流将被直接输出。
要省略 filename 参数而供应 quality 参数,利用空字符串('')。
通过 header() 发送 Content-type: image/jpeg 可以使 PHP 脚本直接输出 JPEG 图像。

2.获取图像信息

1)exif_imagetype — 判断一个图像的类型

解释

int exif_imagetype ( string $filename )

exif_imagetype() 读取一个图像的第一个字节并检讨其署名。

本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合利用来检讨浏览器是否可以显示某个指定的图像。

参数

filename

被检讨的图像文件名。

返回值

如果创造了恰当的署名则返回一个对应的常量(常量值可以为IMAGETYPE_GIF、IMAGETYPE_JPEG、IMAGETYPE_PNG),否则返回 FALSE 。
返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但本函数快得多。

例:exif_imagetype.php

<?php

$filename = \"大众winter.jpg\"大众;//图像文件名称

if (exif_imagetype($filename) == IMAGETYPE_GIF) //如果创造了恰当的署名则返回一个对应的常量与之相称则打印对应内容

{

echo \公众$filename 格式:GIF\"大众;

}

else if (exif_imagetype($filename) == IMAGETYPE_JPEG)

{

echo \公众$filename 格式:JPEG\"大众;

}

else if (exif_imagetype($filename) == IMAGETYPE_PNG)

{

echo \"大众$filename 格式:PNG\公众;

}

else

{

echo \"大众其他格式\公众;

}

?>

结果:

2)getimagesize

getimagesize() 函数用于获取图像大小及干系信息,成功返回一个数组,失落败则返回 FALSE 并产生一条 E_WARNING 级的缺点信息。

语法格式:

array getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize() 函数将测定任何 GIF(1),JPG(2),PNG(3),SWF(4),SWC(5),PSD(6),TIFF(7),BMP(8),IFF(9),JP2(10),JPX(11),JB2(12),JPC(13),XBM(14) 或 WBMP(15) 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

例:getimagesize.php

<?php

var_dump(getimagesize(\"大众./winter.jpg\"大众));//打印获取图片信息

list($width, $height, $type, $attr) = getimagesize(\"大众./winter.jpg\"大众);//获取图片信息赋值给数组

echo \"大众宽度:$width <br>\公众;//打印图像宽度

echo \公众长度:$height <br>\"大众;//打印图像长度

echo \公众类型: $type <br>\公众;//打印图像类型 数字编号工具图片格式

echo \"大众$attr\"大众;//打印图片属性

?>

结果:

3)例:img_info.php

<?php

function getImageInfo($img) //创建一个函数获取图像信息的函数 形参为$img图像名称

{

$img_info = getimagesize($img); //获取图像信息存储给$img_info数组

var_dump($img_info);//打印获取图像信息

switch($img_info[2]) { //判断类型

case 1:

$imgtype = \"大众GIF\公众;

break;

case 2:

$imgtype = \"大众JPG\"大众;

break;

case 3:

$imgtype = \公众PNG\"大众;

break;

}

$type = \"大众格式:\"大众.$imgtype.\"大众字节\"大众; //文件类型

$size = \"大众大小: \公众.filesize($img); //文件大小

echo \"大众 宽度 \"大众;

echo $img_info[0].\"大众<br>\"大众; //打印宽度

echo \公众 高度 \公众;

echo $img_info[1].\"大众<br>\"大众; //打印高度

echo $type.\"大众<br>\"大众; //打印文件类型

echo $size.\"大众<br>\公众; //打印文件大小

return $img_info; //函数返回数组值

}

$img=\公众Winter.jpg\"大众;

getImageInfo($img);

?>

结果:

注:

filesize() 函数返回指定文件的大小。

若成功,则返回文件大小的字节数。
若失落败,则返回 false 并天生一条 E_WARNING 级的缺点。

语法

filesize(filename)

参数描述

filename必需。
规定要检讨的文件。

提示和注释

提示:本函数的结果会被缓存。
请利用 clearstatcache() 来打消缓存。

3.缩放图像

例:img.php

<?php

function resizeimage($img, $width, $height)//创建一个函数 形参为$img为文件名, $width为宽度, $height为高度

{

$type = substr(strrchr($img,\"大众.\"大众),1);//获取图片的类型

//函数strrchr返回末了一次涌现\"大众.\"大众的位置开始到字符串末端的子字符串。
函数substr返回从序号为1的字符串开始到字符串末端的子字符串,即图片的后缀名

switch($type)

{

case \"大众jpg\公众:

$im = imagecreatefromjpeg($img);//创建 JPEG 格式图片

break;

case \"大众gif\公众:

$im = imagecreatefromgif($img);//创建 GIF 格式图片

break;

case \公众png\"大众:

$im = imagecreatefrompng($img);//创建 PNG 格式图片

break;

}

//目标图象名称

$length = strlen($img);//返回文件名长度

$name = substr($img,0,$length);//返回从文件名字符串第一个开始到字符末端的子字符串

$newname = \"大众new\"大众.$name;//重修字符串拼接 即为新的图片名称

$wid = imagesx($im);//获取图像的宽度

$hei = imagesy($im); // 获取图像的高度

$newratio = ($width)/($height);//新的比例

$ratio = ($wid)/($hei);//原有比例

$newimg = imagecreatetruecolor($width,$height);//天生图象

if($ratio>=$newratio)//目标图像变高了,保持高度不变,根据比例改变新图像的宽度。

{

imagecopyresampled($newimg, $im, 0, 0, 0, 0, $width,$height, (($hei)$newratio), $hei);//重采样拷贝部分图像并调度大小

}

//目标图像变宽了,保持宽度不变,根据比例改变新图像的高度。

else

{

imagecopyresampled($newimg, $im, 0, 0, 0, 0, $width, $height, $wid, (($wid)/$newratio));

}

ImageJpeg ($newimg,$newname);//以 JPEG 格式将图像输出到浏览器或文件

ImageDestroy ($im);//开释图像句柄

}

$filename = 'Winter.jpg';//图片名

resizeimage($filename, 120, 90);//调用缩放图像函数

?>

结果:

注:

1)strrchr

strrchr() 函数查找字符串在另一个字符串中末了一次涌现的位置,并返回从该位置到字符串结尾的所有字符。

注释:该函数是二进制安全的。

语法

strrchr(string,char)

参数描述

string必需。
规定要搜索的字符串。

char必需。
规定要查找的字符。
如果该参数是数字,则搜索匹配此数字的 ASCII 值的字符。

返回值:

返回从某个字符串在另一个字符串中末了一次涌现的位置到主字符串结尾的所有字符。

如果未找到此字符,则返回 FALSE。

2)substr

substr() 函数返回字符串的一部分。

注释:如果 start 参数是负数且 length 小于或即是 start,则 length 为 0。

语法

substr(string,start,length)

参数描述

string必需。
规定要返回个中一部分的字符串。

start

必需。
规定在字符串的何处开始。

正数 - 在字符串的指定位置开始

负数 - 在从字符串结尾开始的指定位置开始

0 - 在字符串中的第一个字符处开始

length

可选。
规定被返回字符串的长度。
默认是直到字符串的结尾。

正数 - 从 start 参数所在的位置返回的长度

负数 - 从字符串末端返回的长度

返回值:返回字符串的提取部分,若失落败则返回 FALSE,或者返回一个空字符串。

3)imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像。

载入图像

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失落败则返回一个空字符串。

该系列函数有:

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

imagecreatefromwbmp():创建一块画布,并从 WBMP 文件或 URL 地址载入一副图像

imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像

4)strlen() 函数返回字符串的长度。

语法

strlen(string)

参数描述

string必需。
规定要检讨的字符串。

返回值:若成功则返回字符串的长度,若字符串为空则返回 0。

5)PHP 获取图像宽度函数:imagesx()

imagesx() 函数用于获取图像的宽度,单位为像素,返回值为整型。

语法:

int imagesx( resource image )

参数 image 为如 imagecreatetruecolor()、imagecreatefromjpeg() 等函数返回的图像资源。

PHP 获取图像高度函数:imagesy()

imagesy() 函数用于获取图像的高度,语法及用法同 imagesx() 。

语法:

int imagesy( resource image )

参数 image 为如 imagecreatetruecolor()、imagecreatefromjpeg() 等函数返回的图像资源。

6)imagecopyresampled — 重采样拷贝部分图像并调度大小

解释

imagecopyresampled ( 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 ) : bool

imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍旧保持了极大的清晰度。

如果源和目标的宽度和高度不同,则会进行相应的图像紧缩和拉伸。
坐标指的是左上角。
本函数可用来在同一幅图内部拷贝(如果 dst_image 和 src_image 相同的话)区域,但如果区域交迭的话则结果不可预知。

参数

dst_image

目标图象连接资源。

src_image

源图象连接资源。

dst_x

目标 X 坐标点。

dst_y

目标 Y 坐标点。

src_x

源的 X 坐标点。

src_y

源的 Y 坐标点。

dst_w

目标宽度。

dst_h

目标高度。

src_w

源图象的宽度。

src_h

源图象的高度。

返回值

成功时返回 TRUE, 或者在失落败时返回 FALSE。

7)PHP 输出图像

PHP 许可将图像以不同格式输出:

imagegif():以 GIF 格式将图像输出到浏览器或文件

imagejpeg():以 JPEG 格式将图像输出到浏览器或文件

imagepng():以 PNG 格式将图像输出到浏览器或文件

imagewbmp():以 WBMP 格式将图像输出到浏览器或文件

语法:

bool imagegif ( resource image [, string filename] )

bool imagejpeg ( resource image [, string filename [, int quality]] )

bool imagepng ( resource image [, string filename] )

bool imagewbmp ( resource image [, string filename [, int foreground]] )

参数解释:

参数解释

image欲输出的图像资源,如 imagecreate() 或 imagecreatefrom 系列函数的返回值

filename可选,指定输出图像的文件名。
如果省略,则原始图像流将被直接输出。

quality可选,指定图像质量,范围从 0(最差质量,文件最小)到 100(最佳质量,文件最大),默认75 ,imagejpeg() 独占参数

foreground可选,指定前景色,默认前景色是玄色,imagewbmp() 独占参数

4.绘制文本图像

例:button.php

<?php

header(\"大众Content-type: image/png\"大众);//向客户端发送原始的 HTTP 报头。
Content-type: image/png

$string = 'Button'; //定义一个字符变量$string 为Button

$im = imagecreate(80,30);//创建8030像素的画布资源

$red = imagecolorallocate($im, 200, 100, 100);//为$im画布设置图像颜色 浅红

$blue = imagecolorallocate($im,0,0,255);//为$im画布设置图像颜色 蓝色

$px = (imagesx($im) - 7.5 strlen($string)) / 2; //x坐标

imagestring($im, 4, $px, 10, $string, $blue);//用 $blue 颜色将字符串 $string画到 image 所代表的图像的 x,y 坐标处($px, 10)(这是字符串左上角坐标,整幅图像的左上角为 0,0)。
如果 font 是 1,2,3,4 或 5,则利用内置字体。

imagepng($im);//输出图象到浏览器或文件。

imagedestroy($im);//销毁一图像句柄

?>

结果:

注:imagestring — 水平地画一行字符串

解释

imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ) : bool

imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。
如果 font 是 1,2,3,4 或 5,则利用内置字体。