背景
网站优化不能只盯在代码上,内容也是网站最需要优化的对象之一,而图像又是网站中最主要的内容。图像的优化最需要处理的就是将所有上传到网站中的大图片自动缩放成小图片(在网页中大小够用就行), 以减少 N 倍的存储空间,并提高下载和浏览的速度。所以图片缩放已经成为一个动态网站必须要处理的任务。图片缩放经常和文件上传绑定在一起工作,能在上传图片的同时就调整其大小。当然有时也需要单独处理图片缩放,例如在做图片列表时,如果直接用大图而在显示时才将其缩放成小图,这样做不仅下载速度会很慢,也会降低页面响应时间。通常的解决方法是在上传图片时,再为图片缩放出一个专门用来做列表的小图标,当单击这个小图标时,才会去下载大图浏览。
关键技术
使用GD库处理图片缩放,通常使用 imagecopyresized () 和 imagecopyresampled () 两个函数中的一个,而使用 imagecopyresampled (函数处理后图片质量会更好一些。这里只介绍一下 imagecopyresampled (函数的使用方法。该函数的原型如下所示:
bool 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)
该函数将一幅图像中的一块正方形区域复制到另一幅图像中,平滑地插入像素值,因此,减小了图像的大小而仍然保持了极高的清晰度。如果成功则返回TRUE, 失败则返回FALSE.参数 dst image 和 src image 分别是目标图像和源图像的标识符。如果源图像和目标图像的宽度和高度不同,则会进行相应的图像收缩与拉伸,坐标指的是左上角。本函数可用来在同一幅图像内部复制(如果 dst_image 和 src_image 相同的话)区域,但如果区域交叠,则结果不可预知。
实例代码
在下面的示例中,以JPEG图片格式为例,编写一个图像缩放的函数 thumb () :
<?php
/**
* 对图片进行缩放
* @param string $filename 图片的路径
* @param integer $width 设置图片缩放的宽度
* @param integer $height 设置图片缩放的高度
*/
function thumb($filename,$width=200,$height=200){
// 获得原图的宽度和高度
list($width_orig,$height_orig) = getimagesize($filename);
// 根据参数$width和$height的值,换算出等比例的宽高
if($width && ($width_orig < $height_orig)){
$width = ($height / $height_orig) * $width_orig;
} else {
$height = ($width / $width_orig) * $height_orig;
}
// 将原图缩放到这个新创建的图片资源中
$image_p = imagecreatetruecolor($width, $height);
// 获取原图的图像资源
$image = imagecreatefromjpeg($filename);
// 使用imagecopyresamapled()函数进行缩放设置
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// 将缩放后的图片simage_p保存,图像品质设为100 (最佳质量,文件最大)
imagejpeg($image_p, 'b1.jpg', 100);// 将缩放后的图片保存为 b1.jpg
imagedestroy($image_p);// 销毁图片资源$image_p
imagedestroy($image);// 销毁图片资源$image
}
结果如下图: