PHP 图像处理技术_第1页
PHP 图像处理技术_第2页
PHP 图像处理技术_第3页
PHP 图像处理技术_第4页
PHP 图像处理技术_第5页
已阅读5页,还剩24页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP图像处理技术

第1章PHP图像处理技术1

1.1图像处理基本介绍1

1.2PHP绘图坐标体系I

1.3PHP绘图的基本步骤2

1.4PHP绘图的具体演示3

1.5PHP绘图小作业10

第2章PHP图像处理技术应用11

2.1给图片加水印错误!未定义书签。

2.2课后练习题11

2.3验证码的使用11

第3章PHP图像压缩处理16

3.1图像压缩入门案例16

3.2图像压缩处理类21

第1章PHP图像处理技术

1.1图像处理基本介绍

所谓的PHP图像处理技术,就是通过php的函数进行绘制图像,然后可以输出到浏

览器,也可以保存到本地

该绘图技术,需要开启php的一个扩展:GD2,该扩展提供了很多绘制图像的方法

PHP的图像处理技术的应用场景:

验证码(在图像上面绘制一些文字,人类很容易辨别出来,但是计算机脚本以目前

的技术辨别图像中的字符是有很大的难度)

图像的压缩(;例如上传头像时,本地的图片很大,但是上传到服务器之后,会针

对大图进行压缩处理)

1.2PHP绘图坐标体系

在编程世界中坐标体系和我们上学时数学里面的坐标体系不一样的

o,o越往右,值越大;13579…

越

往

下

,

值

越

大

1.3PHP绘图的基本步骤

(1)先开启php的gd扩展,该扩展里面提供了很多绘图函数

打开php.ini配置文件

;extension=php_bz2.dll

;extension=php_cur1.dll

;extension=php_fileinfo,dll

extension=php_gd2.dll

;extension=php_gettext.dll

;extension=php_girp.dll

;extension=php_intl.dll

重启apache服务器

写一个phpinfo函数,测试一下

|P)page.php汉@Page.class.php而phpinfo.php区

1<?php

12phpinfo();

Jlocalho$t/0331/imaqe/phpinfo.php

1第.共5XA7

Jkr«ctav«Lml

61ter4«f«aLt

filtercoraJarco

r^-i

G>S«pF«rt—Md

GOUadi”(2.10

FrzTyp*SQJE•MblU

FrwTy^eLialtaK*vith

Fr««TyFeVer,;.26.0

OTKTS^*«rt2g

GUGreat•ZIN

Sw»«rt04b1“

libJPK9cf,tibh

FWGSop^rt

liUJKI6.18

ESwtartZZ

XHI•aitblti

id30411

XBISor^rtZ2

t&tblti

(2)开始绘制图像

1.先在内存中,创建图像资源(理解成画布):imagecreatetruecolor

2.给画布分配颜色(默认画布的颜色是真空的黑色):imagecolorallocate。

3.给画笔分配颜色:imagecolorallocate

4.开始绘制:imageline

5.直接在浏览器输出、保存到本地:header()imagepngO

6.销毁画布资源:imagedestroy。

PHP绘图的具体演示

(1)绘制线条imageline。

回page.php叵Page.class.phpdphpinfo.php£)l.drawjine.php区

1<?php

2//l.创建一个画布姿源(在内存中创建一个画布》

3$image=imagecreatetruecolor(500,300);

4

5//2.给画布分配颜色

6//参数1:给那个画布,也就是哪个图像资源分配颜色

7$color=imagecolorallocate($image,24,145,0);

8

9imagefi11($image,0,0z$color);

10

11//3.开始绘制图像(绘制线条)

12//参数1:在啰个画布资源中进行绘制

13//参数2:起点的x轴坐标

14//参数3:起点的y轴坐标

15//缪数4:终点的x轴坐标

16//参数5:终点的y轴坐标

17//参数6:使用什么颜色绘制线条

18$red=imagecolorallocate($imagez255z0,0);

19image1ine($image,0,0,100,100,$red);

|20

|21//4.输出、还是保存(暂时先输出到浏览器)

|22header("Content-Type:image/pngM);

|23//将图像资源输出给浏览器'

|24imagepng($image);

25

|26//5.销毁内存中的图像资源

|27imagedestroy($image);

(2)绘制三角形:imageline。

叵|2.draw_sanjiao.php区

1<?php

2//I.绘制图像资源(创建一个画布)

3$image=imagecreatetruecolor(500,300);

4//2.先分配一个绿色

5$green=imagecolorallocate($image,22,153,0);

6//3.使用绿色填充画布

7imagefill($image,0,0,$green);

8

j9//4.在画布中建制图像

10$bai=imaqecolorallocate($imaqe,255,255,255);

aiimageline($image,100,100,100z200,$bai);

江2imageline($image,100,200,200,200,$bai);

13imageline(§image,100,100,200,200,$bai);

±4

15//3.在浏览器直接输出图像资源

16header("Content-Type:image/jpeg*'>;

17imagejpeg($image);

18

19//销整图像资源

20imagedestroy($image);

(3)绘制矩形:imagerectangle。、imagefilledrectangle()

描边矩形:imagerectangle()

填充矩形:imagefilledrectangle。

[P]2.draw_sanjiao.php|P|3.draw_rectangle.php汉I

<?php

2

//l.绘制图像资源(创建一个画布)

3

$image=imagecreatetruecolor(500,300);

4

//2.先分配一个绿色

5

6$green=imagecolorallocate($image,22,153,0);

//3.使用绿色填充画布

7

imagefi11($image,0/0,$green);

8

9

//4.在画布中绘制图像

10

$bai=imagecolorallocate($image,255,255,255);

11

12//参数1:图像资源(画布)

//参数2、3:起点的X、v轴坐标

3

-//终数4、5:终点的X、V轴坐标

4

//imagerectangle($image,100,100,300,200,$bai);

5

imagefilledrectangle($image,100,100z300,200,$bai);

lb

17//5.任浏览器直接福出图像奥源

18header(nContent-Type:image/jpegn);

19imagejpeg($image);

20

21//6.销整图像资源

22imagedestroy($image);

(4)绘制圆形和椭圆形:imageellipse()、imagefilledellipse()

描边圆形:imageellipse

填充圆形:imagcfillcdcllipse

|P|2.draw_sanjiao.php彷3.drawrectangle.php叵4.draw_crcle.php汉|

1<?php

2//I.绘制图像资源(创建一个画布)

3$image=imagecreatetruecolor(50Cz300);

4//2.先分配一个绿色

5$green=imagecolorallocate($image/22,153,0);

6//3.使用绿色埴充画布

7imagefill($image,0,0,$green);

8

9//4.在画布中绘制图像

10$bai=imagecolorallocate($imagez255z255,255);

11//参数1:图像资源(画布)

12//参数2、3:圆心的坐标

13//参数4、5:圆的半径

14/参数6:使用的颜色

15//imageellipse($image,150,150,100,100,$bai);

16iTnAgpfi11AdAl1ipsp($iTnagpz150,150,100,100,$bai);

17

18//5.在浏览器直接输出图像资源

19header("Content-Type:image/jpeg");

20imagejpeg($image);

21

22//6.销镂图像资源

23imagedestroy($image);

(5)将图片绘制到画布上:imagecopyO

0*5.draw_image.php区

1<?php

2//l.绘制图像资源(创建一个画布)

3$image=imagecreatetruecolor(500,300);

4//2.先分配一个绿色

5$green=imagecolorallocate($imagez22,153,0);

6//3.使用绿色填充画布

17imagefill($image,0,0,$green);

8

9//4.在画布中绘制图像

10$bai=imagecolorallocate($imagez255,255,255);

11〃参数1:$dst_imgdestination,目标图像奥源

12〃参数2:$src_img原图资源,通过imagecr㊀at㊀fromjpegpng等创建的

13//参数3、4:目标图像资源的x、y坐标

14//参数5、6:序图采集的起点x、y坐标

15//参额7、8:集图的空度、高度

16$src_img=imagecreatefrompng(*bs.png*);

17//通过php的函数imagesx()获得图像资源的完度、imagcsy()获得图像资源的高度

18$src_w=imagesx($src_img);

19Ssrch=imaaesv(Ssrcima);

20imagecopy($image,$srcimg,0,。,0,0,$srcwz$srch);

21

22//5.在浏览器直接愉出图像资源

23header(MContent-Type:image/jpegM);

24imagejpeg($image);

25

26〃6.销毁图像奥源

27imagedestroy($image);

(6)绘制字符串:imagestring。

[P]7.draw_ttftextphp叵8.draw_arc.php回G.drawstring.php笈

1<?php

|2//l.绘制图像黄源(创建一个画布)

3$image=imagecreatetruecolor(500,300);

I4//2.先分配一个绿色

55grcon-imagccolorallocatc($imagcz22,153,0);

6//3.使用绿色埴充画布

7imagefill($image,0,0,$green);

9//4.在画布中绘制图像

|10$bai=imagecolorallocate($image,255,255,255);

jll〃绘制文字

112//参数2:字体大小

13//参数3:文字的x轴坐标

14//参数4:文字的y轴坐标

115//参数5:绘制的字符

|16imagestring($image,25,200,250,'hell。itbull',$bai);

|18//5.在浏览器直接输出图像资源

|19header("Content-Type:image/jpeg");

120imagejpeg($image);

21

|22//6.销安图像奥源

|23imagedestroy($image);

helloitbul1

(7)绘制文字:imagettftext。

指定使用哪个字体来绘制文字

博PHPExpt-火出RemoteS...0□由7xiraw_ttftextphp区|58.draw_arcphp

o<>^।e%▼2/7i.定制图像奥海&i建二不由布厂

▼00331*3$image-imagecreatetruecolor(500,300);

>®css4//2.先分配一个绿色

v®image5Sgreen=imagecolorallocate(Simage,22,153,0);

>回1«draw_Sn*php6//3.使用燥邑缜无福布

>®2«draw_=曲。.php7imagefill($image,0,0,$green);

>®3xlrawjectangle.php8

>曲4drE_&dc.php

9//4.在画布中绘制图像

>®5xir®w_image.php10$bai=imagecolorallocate($image,255,255,255);

>®6xir»w_$tnng.php

>®7xir«w_ttftext.php11//使用指定的字体文件绘蒯文字

>08-dfaw^rc.php12//r»2:字体大小

Bypng13//登数3:字体恒折的角度

>@phpinfo.php14//冬数4、5:文字的X、y坐标

.STHUPO.TTFis//r«6:文字的颜色

、$TXINW?I.HF16//叁畛7:重体文件

uploadjpg17//登数8:绘制的文字

>0PF18imagettftext(Simage,30,30,200,250,$bai,•STHUPO.TTF','helloworld1);

>211-goodsJistphp

>024e«nplate.php

20//5.在浏览器直接幅出回保费源

>®3_page.php21header("Content-Type:image/jpeg");

>商4.page.php

>团5.page.php22imagejpeg($image);

>他DAOMySQU.dass.php23

>④index.php24//6.侑贫图像资源

>®Pagexlass.php25imagedestroy($image);

(8)绘制弧形:imagearc。

说明:三点钟的位置是起点(0度)

面7.draw_ttftextphp®8.draw_arc.php汉I

|1<?php

I2//l.绘制图像资源(创建一个画布)

:3$image=imagecreatetruecolor(500,300);

I4//2.先分配一个绿色

i5Sgreen=imagecolorallocate(Simage,22,153,0);

I6//3.使用绿色填充画布

7imagefill($image,0,0,$green);

I9//4.在画布中绘制图像

110$bai=imagecolorallocate($image,255,255,255);

ill//绘制灵形,如果填充的话就是扇形

112//参数2、3:见形的圆心的坐标

113//参数4、5:见形的半径(速度、高度)

//终数6、7:开始的角度、结束的角度(3点钟的位置是0,起点。

I~~//imagearc($image,100,100,100,100,0,90,$bai);~~~

116imagefilledarc(Mintage,100,100,100,100,0,90,$bai,IMG2kRCPIE);

18//5.在浏览器直接输出图像资源

|19header(*'ConTent-Type:image/jpeg**);

|20imagejpeg($image);

|21

22//6.销钱图像资源

(23imagedestroy($image);

1.5PHP绘图小作业

绘制小乌龟(可选的作业)

1.6课后练习题

将某个文件夹下面所有的图片,批量打上”泰牛泰牛,越学越牛”水印

提示:scandir()遍历某个目录下面的所有文件、子目录

第2章PHP图像处理技术应用

2.1验证码的使用

验证码(CAPTCHA)是“CompletelyAutomatedPublicTuringtesttotellComputersand

HumansApart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人

的公共全自动程序。可以防止:恶意破解密码、注册、刷票、论坛灌水,有效防止某个黑客对某一

个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试

2.2封装验证码类

(1)封装一个验证码类,先实现能够随机生成不同颜色的背景

回Captcha.dass.php区

1<?php

2❸/*

3*封装蛉证码类

4*/

5-classCaptcha

6(

7//成员属性

8private$width=100;//画布的宽度

9private$height=30;//画布的高度

10private$number=4;//筠证码的字符个数

11private$font_file=^THUPO.TTF*;//睑证码的字体文件

12private$font_size=*25pxf;//筠证码的字体大小

13

14publicfunction_set($pz$v)

15(

16if(property_exiots($this,$p)){

17$this->$p=$v;

18)

19)

20publicfunction_get($p)

21(

22if(property_exists($this,$p)){

23return$this->$p;

24

25)

26//开始绘制将证码

27-publicfunctionmakeimage。

28{

29//l.创建画布,背景颜色应该是随机产生的,尽量背景颜色浅一点

$image=imagecreatetruecolor($this->width,$this->height);

31//2.分配颜色

32

$color=imagecolorallocate($image,mt_rand(100,255),mt_rand(100,255),

34mt_rand(100,255));

imagefill【$image,0,0,$color);

36//3.输出到浏览器'

37header("Content-Type:image/png");

imagepng(Simage);

39//4.销安图像资源

40imagedestroy($image);

41)

42}

43

44$captcha=newCaptcha();

45$captcha->makeInage();

(2)在生成的图片上面随机的产生文字(字母、数字)

由于随机生成字符的代码肯定会很多,所以我们将生成字符的代码封装到函数中

41//生成随机的字符

42-publicfunctionmakeCode()

43|{

44//大写字母,range()用来生成一个数组,包含从指定的开始字符到结束字符范围内的元素的数组

45$upper=range('A*,*Z1);

46//小写字母一

47$lower=range('a',,z1);

48〃数字,避免0、l、2

49$number=range(3,9);

50//把3个射组合并成一个数组

$code=array_merge($lower,Supper,$number);

52//打乱数组顺序

shuffle($code);

54//根据属性中指定的字符个数,创建字符

$str=**;

56for($i=O;$i<$this->number;$i++){

57$str.=$code[$i];

58)

59//echo1<pre>,;

60//var_dump($str);

61return$str;

)

(3)把随机生成的字符写入到画布中

使用imagettftext()写入,因为可以指定字体文件

如何实现让每个字符所在的位置不一样,倾斜的角度也不一样?

思路:遍历这4个字符,指定每一个字符的位置、倾斜的角度

//开始绘制验证码

publicfunctionmakeimage()

(

//I.创建画布,背景颜色应该是随机产生的,尽量背景颜色浅一点

$image=imagecreatetruecolor($this->widthz$this->height);

//2.分配颜色

$color=imagecolorallocate(Simage,mtrand(100,255),

mt_rand(100,255),mt_rand(100,255));

imagefill($imageA0,0r$color);

//3,开始绘制文字

$code=$Lhis->makeCode();

for($i=0;$i<strlen($code);$i-+){

imagettftext($imagez$this->font_size,mt_rand(-30,30),

($this->width/$this->number)*$i+5z20,mt_rand(0,100)^

$this->font_file,$code[$i]);

).

//绘制100个干扰像素点

for($i=0;$i<100;$i++){

imagesetpixel($image,mt_rand(0,$this->width),

mt_rand(0z$this->height),mt_rand(0,100));

~~

//练习:绘制10条干扰线条

//3.输出到浏览器

header("Content-Type:image/png");

imagepng($image);

//4.销毁图像资源

imagedestroy($image);

}

(4)给画布增加一些干扰像素、干扰线条

47//练习:绘制10条干扰线条

48for($i=0;$i<10;$i++){

49$color=imagecolora22ocate($image,mt_rand(100,150),

50mt_r<and(100,150),rat_rand(100,150));

51image」ine($image,mt_rand(Q,$this->width),mt_rand(0,$this->height),

52mtrand(0,§this->width),ratrand(Q,$this->height),$color);

53一}

2.3将验证码类应用到案例中

首先我们先创建•个表单:

叵)Captcha.class.php同fogin.htnl笈叵check.php

1<!DOCTYPEhtml>

2€><html>

3日<head>

4<metacharset="UTF-8n>

5<title>lnserttitlehere</title>

6</head>

7&<body>

8c<formaction="check.php"method=Mpostw>

为<table>

[0e<tr>

11请]前入蛉证码:

12<td.cinoultvpe='text"name="capt:cha"></tci>

13src="-ttp://2oca2hos</0402/Captcha.c/ass.p?]p">k/td>

14</tr>

15e<tr>

168<td>

17<inputtyipe="submit"value=M^j?n>

18</td>

19</tr>

20</table>

21</form>

|22g/body>

23</html>

当我们提交表单的时侯,拿用户输入的验证码和我们生成的验证码进行比较

如何将生成的验证码保存起来?

需要使用到会话技术:SESSION技术

第3章PHP图像压缩处理

3.1图像压缩介绍

我们之前学习过文件的上传(上传一个头像),但是上传的文件不能直接使用的,

因为本地的文件可能会很大,在前端页面显示的时候,就会加载很长时间,所以我们通

常会先压缩再使用

通常压缩的时候,一般是按照等比例压缩,所谓的等比例压缩就是宽度、高度同时

压缩相同的比例,在实际开发的时候,我们通常会根据具体的需要(前端页面的需求)

在指定的范围内进行等比例压缩

3.2图像压缩入门案例

图像压缩非常简单,就是一个php的图像处理函数:imagecopyrcsamplcd

该函数有1()个参数:

<?php

〃制作缩略图、图像压缩

//参数1:目的地图像资源(通常指的是画布资源)

$dst_image=imagecreatetruecoior(100,100);

$color=i/nageco2ora22ocate($dst_image,22,139,0);

imagefill($dst_imager0,0z$color);

//参数2:原图资源(将该图片资源压缩之后,再保存到目的地画布中)

$src_image=imagecreatefrompng('bs.png*);

//参数3、4:目的地(画布的起点坐标)

$dst_x=0;

$dst_y=0;

//参数5、6:原图的(起点坐标)

$src_x=0;

$src_y=0;

〃参数7、8:目的地(画布的宽度、高度)

$dst_w=100;

$dst_h=100;

//参数9、10:原图的宽度、高度

〃通过imagesx()函数获得图像资源的宽度、imagesy()获得图像资源的高度

$src_w=imagesx($src_image);

$src_h=i/nagesy($src_image);

imagecopyre5ampled($d5t_image,$src_image,$dstx,$dsty,$src_xz$srcy,$dstwz

$dst_h,$src_w,$src_h);

〃可以保存、也可以输出到浏览器

//1.直接在浏览器输出

header("Content-Type:image/png");

imagepng($dst_image);

//2.保存到本地,只需要给imagepng()函数增加第二个参数(保存地址)即可

//imagepng($dst_imagez*./thumb_bs.png');

3.3图像等比例压缩

假设我们缩放1()倍

喻2.make_thumb.php应

1<?php

2//制作缩略图、图像压缩

3

4//参数2:原图资源:将该图片资源压缢之后,再保存到目的地画布中)

5$src_image=imagecreatefrompngt'bs.png*);

6//爹丽、4:目的地(画布的起点坐标)

7$dst_x=0;

85dGt_y=0;

9//参数5、6:原图的(起点坐标)

10$src_x=0;

11$src_y=0;

12—

13//参数9、10:原图的宽度、高度

14//通过imagesx()函数获得图像资源的宽度、imagesy()获得图像资源的高度

15$src_w=imagesx($src_image);

jl6$src_h=imagesy($src_image);

17~~

18//参数7、8:目的此(画布的宽度、高度)

19$dst_w=(inti$src_w/10;

20$dst_h=(int)$src_h/10;

21—

22

23//参数1:目的地图像资源(通常指的是画布资源)

24$dstimaqe=imacrecreatetruecolor($dstw,$dsth);

25$color=imagecolorallocate($dst_imager22,139,0);

26imagefill($dst_image,0,0,$color);

27一

28

29ira<agecopyresdmp2ed($dst_image,$src_imager$dst_xz$dst_yz$src_x,$src_y,Sdstw,

30$dsth,$srcw,$srch);

31

,32//可以保存、也可以涌出到浏览器

33//I.直接在浏览器渝出

34header("Content-Type:image/png");

35imagepng($dst_image);

36-

:37//2.保存到本地,只需要给imagepng()的数增加第二个叠数(保存地址)即可

38//imagepng($dst_image,'./thumb_bs.png*);

39一一

但是上面的代码,如果应用到下面的场景中,就不太灵活

©PHP,SmartyQMVC

ThinkPHP@Web的HTM

©Q

所以我们要实现:在上面场景中的范围中,生成一个最优的压缩图像

回3.thumbarea.php汉I

1<?php

2

3makeThumb(10Qr50);

4

5//参数1:压缩的范围宜度

6//参数2:压缩的范围的高度

7」functionmakeThumb($area_wz$area_h)

8

9

10//参数2:原图奥源(将该图片姿源压缩之后,再保存到目的地画布中)

11$src_image=iraagecredtefrompng(fbs.png*);

12//参丽、4:目的地(画布的起点坐标)

13$dst_x=0;

14$dst_y=0;

15//参数5、6:原图的(起点坐标)

16$src_x=0;

17$src_y=0;

18//参数9、10:原图的宽度、高度

19//通过imagesx()函数获得图像资源的宽度、imagesy()获得图像资源的高度

20$src_w=imagesx($src_image);

21$src_h=imagesy($src_image);

22

23//袋数7、8:目的地(画布的宽度、高度)

24//计算压缩的比例

25if($src_w/§area_w>=$src_h/$area_h){

26$scale=$src_w/$area_w;

27}else{

28$scale=$src_h/$area_h;

29}

30

31$dst_w=(int)$src_w/$scale;

32$dsth=(int)$srch/$scale;

33

34

35//参数1:目的地图像资源(通常指的是画布资源)

36$dst_image=imagecreatetruecolor($dst_w,$dst_h);

37$color=imagecolora11ocate($dst_image,22,139,0);

38imagefill($dst_image,0,0,$color);

39

40

41ira<agecopyres<3mp2ed($dst_image,$src_image,$dst_x,$dst_y,$src_x,$src_y,

42$dst_w,$dst_h,$src_w,$src_h);

43

44//可以保存、也可以输出到浏览器

45//I.直接在浏览器输出

header("Content-Type:image/png");

47imagepng($dst_image);

48―

49}

3.4图像压缩处理类

因为主流的编程思想是:OOP面向对象编程,文件的最新单位是类

思考:

有哪些属性:

原图文件

压缩文件保存的地址

有哪些成员方法:

制作压缩图像的方法

3.thumb_area.php@Thumb.cbss.php笈04.basename.php

1<?php

2e/*

3*图像压缁

4*/

5classThumb

6

7//成员属性

8private$file;//原图文件

9private$thumb_path;//压缩文本件保存的地址

10

liepublicfunction_set($p,$v)

12

13if(property_exists($this,$p)){

14$this->$p=$v;

15)

16)

17epublicfunction_get($p)

18

19if(property_exists($this,$p)){

20return$this->$p;

21

22

23//变数1:压缩的范围宽度

24//参数2:压缩的范围的高度

259functionmakeThumb($area_w,$area_h)

26{

27//卷数2:原氮资源(将该图片资源压缩之后,再保存到目的地画布申)

28$src_image=imagecreatefrompng($this->file);

29//参布、4:目的地(画布的起点坐标)

30$dst_x=0;

31$dst_y=0;

32//参数5、6:原图的(起点坐标)

33$src_x=0;

34$src_y=0;

35//参数9、10:原图的宽度、高度

36//通过imagesx()函数获得图像资源的宽度、imagesy()获得图像资源的高度

37$src_w=i/nagesx($src_image);

38$src_h=imagesy($src_image);

39

40//参数7、8:目的地《画布的宽度、高度)

41//计算压缩的比例

42if($src_w/$area_w>=$src_h/$area_h){

43$scale=$src_w/$area_w;

44}else{

45$scale=$src_h/$area_h;

46)

47

48$dst_w=(int)$src_w/$scale;

49$dst_h=(int)$src_h/$scale;

50

51

52//参数1:目的地图像资源《通常指的是画布奥源)

53$dst_image=imagecreatetruecolor($dst_wz§dst_h);

54$color=imagecolora11ocate($dst_image,22,139,0);

55imagefill($dst_imagez0,0,$color);

56

57

58imagecopyresampled($dst_imager$src_image,$dst_x,$dst_y,:_xf$src_y,

59$dstwr$dst_h,$src_wr$src_h);

60

61//可以保存、也可以饰出到浏览器

62//I.imaaeDna()增加:苗二个,的表示快存文件

63//通常会把压缩之后的图片保存到thumb子目录中,按照日期格式的子目录保存

64$sub_path=dateCYmd1).*/*;

65$path=§this->thumb_path;

66if(!isdir($path.Ssubjpath)){

67rakdir($path.$sub_path,0777,true);

68J

68//thumb/20170402/

69//压缩的图像的文件名,在原文件名的基础上熠加前缀:thumbbs.png

70$origin_filename=basename($this->file);

71$thumb_naine=,thumb_*.$origin_filename;

72

73//header(MContent-Type:image/png");

74imagepng($dstimage,$path.$subpath.$thumbname);

75

76//最后,一定要把文件地址返回(接收之后最后保存起来)

77return$sub_path.$thumb_name;

78)

79)

80

81$thumb=newThumb();

82$thumb->file='bs.png,;

83$thumb->thumb_path=1thumb/1;

84$file=$thumb->makeThumb(50,50);

85var_dumpfile);

86一

3.5完善压缩处理类(支持主流的图像类型(jpg、png、gif)

Jpg->imagecreatefromjpegO

Png->imagecreatefrompng()

Gif-^imagecreatrefromgif()

保存图像的时候:

Png--^imagepng()

Gif—-->imagegif()

Jpg—>imagejpeg()

所以我们先定义属性分别保存创建图像资源、保存图像的函数,将来再通过图像的类型找到

对应的创建、生成函数

[P]3.thumbarea.php@Thumb.class.php区回4.basename.php

1<?php

2©/*

3*图像压缩

4*/

5-classThumb

6(

7//成员属性

8private$file;//原图文件

9private$thumbpath;//压缩文本件保存的地址

10//创建原图资源的函数

lieprivate$create_func=array(

12,image/png,=>'imagecreatefrompng1,

13*image/jpeg*=>'imagecreatefromjpeg1,

14,image/gif,=>'imagecreatefromgif1

15);

16//保存图像资源的函数

17eprivate$output_func=array(

18,image/png,=>1imagepng1,

19,image/jpeg1=>'imagejpeg,,

20,image/gif,=>1imagegif,

21);

如何获得图像资源的mime类型呢?

Getimagesize函数可以获得图像资源的大小、图像的mime类型

演示:

回3.thumbarea.php回Thumb.class.php叵4.basename.php05.getimagesize.php区

1<?php

2$file=*bs.png,;

3$file_info=getimagesize($file);

4echo*<pre>,;

15va2^duznp($tile_into);

<-Dlocalhost/0402/thumb/5.getimagesize.php

array(6){

[0]=>

int(268)

[1]=>

int(240)

[2]=>

int(3)

[3]=>

string(24)"width="268"height1240””

[*bits*]=>

ime)

string(9)“image/png”

由于我们之前保存了图像的mime类型和创建图像资源函数之间的映射关系,所以我们只需要获得

图像的mime类型,即可获得创建、生成保存的函数

我们就将这个初始化的操作写到构造函数中,因为构造函数就是用来初始化一些属性、值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论