文章教程

19.3.4生成已有图片的缩略图

9/17/2020 9:26:54 PM 人评论 次浏览

19.3.4 生成已有图片的缩略图

对一张大图生成一个缩略图,也可以看作是图片效果处理的一部分。使用GD库的“复制并调整大小”的函数可以很容易实现生成缩略图,这个函数就是imagecopyresized(),代码19-10演示了通过该函数为图片生成缩略图。

代码19-10 生成已有图片的缩略图19-10.php


01 <?php

02 $img_name="tower.jpg";

03 $src_img=imagecreatefromjpeg($img_name);

04

05 $ow=imagesx($src_img);//取得原图的宽

06 $oh=imagesy($src_img);//取得原图的高

07

08 $nw=round($ow*200.0/$ow);//计算新图的宽度

09 $nh=round($oh*200.0/$oh);//计算新图的高度

11 $desc_img=imagecreate($nw,$nh);//建立新图

12

10

13 imagecopyresized($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);//生成缩略图

14 imagejpeg($desc_img);

15

16 imagedestroy($desc_img);

17 imagedestroy($src_img);

18 ?>


【代码解析】这段代码将原图缩小为宽200、高200像素的图像,函数imagecopyresized()的语法如下所示。


bool imagecopyresized(resource$dst_img,resource$src_img,int$d_x,int

$d_y,int$s_x,int$s_y,int$d_w,int$d_h,int$s_w,int$s_h)


函数imagecopyresized()将一幅图像中的一块正方形区域复制到另一个图像中,该函数参数很多,但都很好理解。第1个和第2个参数分别是目标图像、原图像的标识符,接下来4个参数是目的图像和原图像的复制位置的坐标,最后4个参数是目的图像和原图像的复制区域的宽高。这段代码的执行结果如图19-13所示。

图 19-13 使用函数imagecopyresized()生成缩略图

从这个结果可以看出,缩略图的效果并不能令人满意。可以使用函数imagecopyresampled()获取更好的缩略图效果,该函数重采样复制部分图像并调整大小,代码19-11演示了该函数的用法。

代码19-11 在程序中使用函数imagecopyresampled()19-11.php


01 <?php

02 $img_name="tower.jpg";

03 $percent=0.2;

04

05 $src_img=imagecreatefromjpeg($img_name);

06

07 $ow=imagesx($src_img);//取得原图的宽

08 $oh=imagesy($src_img);//取得原图的高

09

10 $nw=$ow*$percent;

11 $nh=$oh*$percent;

12

13 $desc_img=imagecreatetruecolor($nw,$nh);

14 imagecopyresampled($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);//生成缩略图

15

16 imagejpeg($desc_img);

17 imagedestroy($desc_img);

18 imagedestroy($src_img);

19 ?>


这段代码的执行结果如图19-14所示。

图 19-14 使用函数imagecopyresampled()对图像重新采样

【代码解析】从图19-14可以看出,使用函数imagecopyresampled()可以创建出一个效果更佳的缩略图。函数imagecopyresampled()的语法如下所示。


bool imagecopyresampled(resource$dst_img,resource$src_img,int$d_x,int

$d_y,int$s_x,int$s_y,int$d_w,int$d_h,int$s_w,int$s_h)


该函数各参数的意义和函数imagecopyresized()一样,这里不再赘述。

教程类别