生成缩略图

前几天网站要求把上传的图片处理出大小不同的样式供使用。
就研究了一下php生成缩略图的方法。

下面是源代码:

<?php
//产生缩略图函数
/*
$im 图片文件
$contrastWidth 参考的宽
*/
function resized($im,$contrastWidth) {
//以下开始处理图片,产生微缩图

//处理要 获得的大图,获取宽,比较
/*
if(385<=$imgWidth) {
$imgWidth1 = 385;
}
*/

//获得Image信息
$imgInfo = getimagesize($im);
//图片的宽和高
$imgWidth = $imgInfo&#91;0&#93;;
$imgHeight = $imgInfo&#91;1&#93;;
//图片的类型
$imgType = $imgInfo&#91;2&#93;;

//检查上传图片的宽和基础宽(385)比较,比基础大就用385,比基础小就用上传图片的宽
$imgWidth1 = $contrastWidth<=$imgWidth ? $contrastWidth : $imgWidth;

//用修改后的宽和上传图片的宽比较,获得大小比率
$pre = $imgWidth1/$imgWidth;
//根据比率,获得处理所需的图片的高
$imgHeight1 = $imgHeight*$pre;

//新建一个真彩图片
$nimage=imagecreatetruecolor($imgWidth1,$imgHeight1);

//根据图片的不同类型,使用不同等函数
switch($imgType) {
case 1: $simage =imagecreatefromgif($im); break;
case 2: $simage =imagecreatefromjpeg($im); break;
case 3: $simage =imagecreatefrompng($im); break;
case 6: $simage =imagecreatefromwbmp($im); break;
default: die("不支持的文件类型"); exit;

}

//图片复制,会改变图片的原来的样子
//imagecopy($nimage,$simage,0,0,0,0,$imgWidth1,$imgHeight1);
//重采样拷贝部分图像并调整大小
imagecopyresampled($nimage,$simage,0,0,0,0,$imgWidth1,$imgHeight1,$imgWidth,$imgHeight);
//拷贝部分图像并调整大小
//imgagecopyresized($nimage,$simage,0,0,0,0,$imgWidth1,$imgHeight1,$imgWidth,$imgHeight);

switch ($imgType){
case 1:
imagegif($nimage, $im);
//imagejpeg($nimage, $im);
break;
case 2:
imagejpeg($nimage, $im);
break;
case 3:
imagepng($nimage, $im);
break;
case 6:
imagewbmp($nimage, $im);
//imagejpeg($nimage, $im);
break;
}

//覆盖原上传文件
imagedestroy($nimage);
imagedestroy($simage);
}

?>

这样处理出来的图片,大小真的差好多,对网站的下载速度会有很大的改善。
这个函数的参数需要,图片文件(如:./upload/1.gif),参考的宽度(如:380,单位是px,省略)。
这个函数是根据宽度的对比来处理的,如果要是高有限制,可以做下相关的修改。

生成缩略图》有1个想法

发表评论

返回顶部