《PHP中生成缩略图函数封装》

<?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);*/

?>
写的还是比较详细的,希望对大家有所帮助
 


友情提示:大家一定要注意自己的路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值