首先上封装的函数代码:
function thumb($filename,$destination=null,$dst_w=null,$dst_h=null,$isReservedSource=true,$scale=0.5){ list($src_w,$src_h,$imagetype)=getimagesize($filename); //得到原始图像的长宽 if(is_null($dst_w)||is_null($dst_h)){ $dst_w=ceil($src_w*$scale); $dst_h=ceil($src_h*$scale); } $mime=image_type_to_mime_type($imagetype); //echo $mime 会输出image/jpg $createFun=str_replace("/", "createfrom", $mime); //$createFun使得image/jpg转换为imagecreatefromjpg来生成图像,这样就可以使用$mime得到图片的类型(如jpg,png)等 //不用每次都设定函数为imagecreatefromjpg,imagecreatefrompng等 $outFun=str_replace("/", null, $mime); $src_image=$createFun($filename); $dst_image=imagecreatetruecolor($dst_w, $dst_h); imagecopyresampled($dst_image, $src_image, 0,0,0,0, $dst_w, $dst_h, $src_w, $src_h); if($destination&&!file_exists(dirname($destination))){ mkdir(dirname($destination),0777,true); } $dstFilename=$destination==null?getUniName().".".getExt($filename):$destination; $outFun($dst_image,$dstFilename); imagedestroy($src_image); imagedestroy($dst_image); if(!$isReservedSource){ unlink($filename); } return $dstFilename; }
该函数保存在 ../lib/image.func.php中
有因为getUniName()函数和getExt()函数在 ../lib/string.func.php中,所以
调用函数为:
require_once '../lib/string.func.php'; require_once '../lib/image.func.php'; $filename="des_big.jpg"; //thumb($filename); thumb($filename,"image_50/".$filename,50,50,true); //调用../lib/image.func.php函数 thumb($filename,"image_220/".$filename,220,220,true); thumb($filename,"image_350/".$filename,350,350,true); thumb($filename,"image_800/".$filename,800,800,true);
输出结果是会在image_50,image_220,image_350,image_800的文件夹内分别产生50*50,220*220,350*350,800*800的图片(以des_big.jpg为原型产生的)
/** * 生成唯一字符串 * @return string */ function getUniName() { return md5(uniqid(microtime(ture),(ture))); //这里得到一个可以变化的字母家数字,为了使上传的文件即使相同,传到服务器上也不相同 ;我觉得用date(y.m.d).time()这样更好,又能得到时间,后面的time()时间戳还能变化 } /** * 得到文件的扩展名 * @param string $filename * @return string */ function getExt($filename){ return strtolower(end(explode(".",$filename))); }
以下介绍在函数中用到的函数:
imagecreatetruecolor — 新建一个真彩色图像 说明 resource imagecreatetruecolor ( int $width , int $height )
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 ) imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。
file_exists() 函数检查文件或目录是否存在。 如果指定的文件或目录存在则返回 true,否则返回 false。 语法 file_exists(path)
imagedestroy — 销毁一图像 说明 bool imagedestroy ( resource $image ) imagedestroy() 释放与 image 关联的内存。image 是由图像创建函数返回的图像标识符,
image_type_to_mime_type — 取得 getimagesize,exif_read_data,exif_thumbnail,exif_imagetype 所返回的图像类型的 MIME 类型
MIME类型有如jpeg,png之类的
imagecreatefromjpeg — 由文件或 URL 创建一个新图象。 说明 resource imagecreatefromjpeg ( string $filename ) imagecreatefromjpeg() 返回一图像标识符,代表了从给定的文件名取得的图像。