<?php
/**
*需求:
*指定缩放比例
*最大宽度和高度,等比例缩放
*
*可以对缩略图文件添加前缀
*选择是否删除缩略图原文件
*/
/**
*@param [string] 传过来的参数是文件名字符串
*@return [array] 返回值是一个数组,包含图片宽度、高度、创建和输出的字符串以及扩展名
*/
function getImageInfo($filename){
if(@!$info=getimagesize($filename)){//getimagesize()函数可以得到文件信息,
//还可以判断图片是否为真实的图片类型,详细功能见PHP手册
exit('文件不是真实图片');
}
//print_r($info);可以查手册看一下这个数组中每个参数的含义
$fileInfo['width']=$info[0];
$fileInfo['height']=$info[1];
$mime=image_type_to_mime_type($info[2]);//info[2]这个是图片类型对应的数字,此函数可以根据该数字返回出文件对应的MIME类型,详细见手册
//echo $mime;看一下这个$mime的输出格式,你就会理解下面为什么会这么做了
$createFun=str_replace('/', 'createfrom', $mime);//将$mime中的'/'替换成'createfrom',
//因为后边要用到imagecreatefromjpeg/jpg/png 这个函数,这样就可以动态使用不同的函数了
$outFun=str_replace('/', '', $mime);
$fileInfo['createFun']=$createFun;
$fileInfo['outFun']=$outFun;
$fileInfo['ext']=strtolower(image_type_to_extension($info[2]));//image_type_to_extension()是得到文件后缀名函数
return $fileInfo;//返回文件信息
}
/**
*形成缩略图函数
* string $filename 文件名
* string $dest 缩略图保存路径,默认保存在'images/thumb'
* string $pre 默认前缀为shulv_
* type $dst_w 最大宽度
* type $dst_h 最大高度
* float $scale 默认缩放比例
* boolean $delSource 是否删除原文件 默认是不删除
*
*返回值是 最终保存路径及文件名
*/
function thumb($filename,$dest='images/thumb',$pre='shulv_',$dst_w=null,$dst_h=null,$scale=0.5,$delSource=false){
// $filename='images/2.jpg';
// $scale=0.5;//默认缩放比例
// $dst_w=200;//默认缩略图的最大宽高
// $dst_h=300;
// $dest='images/thumb';//默认缩略图保存的路径
// $pre="shulv_";//缩略图文件名前缀
// $delSource=false;//是否删除原文件,默认是不删除的
//print_r(getImageInfo($filename));
$fileInfo=getImageInfo($filename);
$src_w=$fileInfo['width'];
$src_h=$fileInfo['height'];
//如果指定最大高度和宽度,则按照等比例进行处理
if(is_numeric($dst_w) && is_numeric($dst_h)){
$ratio_orig=$src_w/$src_h;
if($dst_w/$dst_h > $ratio_orig){
$dst_w=$dst_h*$ratio_orig;
}else{
$dst_h=$dst_w/$ratio_orig;
}
}else{//否则按照默认的缩放比例处理
$dst_w=ceil($src_w*$scale);
$dst_h=ceil($src_h*$scale);
}
$dst_image=imagecreatetruecolor($dst_w, $dst_h);//创建目标画布的大小
$src_image=$fileInfo['createFun']($filename);
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
//检测给定的默认目录是否存在
if($dest && !file_exists($dest)){
mkdir($dest,0777,true);
}
$randNum=mt_rand(100000,999999);//产生一个六位数字充当文件名
$dstName="{$pre}{$randNum}".$fileInfo['ext'];
//echo $dstName;
$destination=$dest?$dest.'/'.$dstName:$dstName;
$fileInfo['outFun']($dst_image,$destination);
imagedestroy($src_image);
imagedestroy($dst_image);
if($delSource){
@unlink($filename);
}
return $destination;//返回文件的保存路径
}
/*$filename='images/4.jpg';
thumb($filename);*/
?>
写的还是比较详细的,希望对大家有所帮助
友情提示:大家一定要注意自己的路径