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所示。
从这个结果可以看出,缩略图的效果并不能令人满意。可以使用函数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()可以创建出一个效果更佳的缩略图。函数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()一样,这里不再赘述。