这个函数能生成指定宽度跟高度的图片,原图不进行任何裁剪,可根据需要是否保留原图,缩略图的保存路径自定义。
生成图片缩略图的函数
PHP代码:
<?php
/*
生产缩略图主函数,返回缩略图路径
@src1:图片地址
@w,@h:缩略图宽高
@path:缩略图保存路径
@needDel:生产缩略图后是否删除原图
*/
function resize($src1,$w,$h,$path,$needDel)
{
$info=getimagesize($src1);
$width=$info[0];
$height=$info[1];
$imageType=$info[2];
$im=create($src1,$imageType);
$per1=round($width/$height,2);//计算原图长宽比
$per2=round($w/$h,2);//计算缩略图长宽比
if($per1>$per2)
{
$per=$w/$width;
}
if($per1<$per2)
{
$per=$h/$height;
}
if($per1==$per2)
{
$per=$w/$width;
}
$temp_w=intval($width*$per);//计算原图缩放后的宽度
$temp_h=intval($height*$per);//计算原图缩放后的高度
$temp_img=imagecreatetruecolor($temp_w,$temp_h);
if($per1>$per2)
{
//宽度优先
imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
$newName=$path.rename2($src1,false);
imagejpeg($temp_img,$newName);
//在缩放之后高度不足的情况下补上背景
return addBg($newName,$w,$h,"w",$path,$needDel);
}
if($per1==$per2)
{
//等比缩放
imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
$newName=$path.rename2($src1,false);
imagejpeg($temp_img,$newName);
imagedestroy($temp_img);
imagedestroy($im);
return $newName;
}
if($per1<$per2)
{
//高度优先
imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
$newName=$path.rename2($src1,false);//一次生成
imagejpeg($temp_img,$newName);
//在缩放之后宽度不足的情况下补上背景
return addBg($newName,$w,$h,"h",$path,$needDel);
}
}
/*
重名名文件
*/
function rename2($file,$re=true)
{
$info=pathinfo($file);
if($re)
{
$filename=rtrim($info["basename"],".".$info["extension"]);
return $filename."_2.".$info["extension"];
}
else
{
return $info["basename"];
}
}
function create($src,$imagetype)
{
switch($imagetype)
{
case 1 :
$im = imagecreatefromgif($src);
break;
case 2 :
$im = imagecreatefromjpeg($src);
break;
case 3 :
$im = imagecreatefrompng($src);
break;
}
return $im;
}
/*
添加背景
@src_img:图片src
@w:宽
@h:高
@first:决定宽度还是高度优先
@path:缩略图保存的位置
@needDel:是否删除原图
*/
function addBg($src_img,$w,$h,$fisrt="w",$path,$needDel=false)
{
$bg=imagecreatetruecolor($w,$h);
$white = imagecolorallocate($bg,255,255,255);
imagefill($bg,0,0,$white);
$temp_info=getimagesize($src_img);
$im2=create($src_img,$temp_info[2]);
$width2=$temp_info[0];
$height2=$temp_info[1];
if($fisrt=="w")
{
//宽度优先,解决缩放后高度不足
$y=($h-$height2)/2;
imagecopymerge($bg,$im2,0,$y,0,0,$width2,$height2,100);
$file=$path.rename2($src_img,1);
imagejpeg($bg,$file);
imagedestroy($bg);
imagedestroy($im2);
if($needDel==true)
{
@unlink($src_img);
}
return $file;
}
if($fisrt=="wh")
{
//等比缩放
return $src_img;
}
if($fisrt=="h")
{
$x=($w-$width2)/2;
//高度优
imagecopymerge($bg,$im2,$x,0,0,0,$width2,$height2,100);
$file=$path.rename2($src_img,1);
imagejpeg($bg,$file);
imagedestroy($bg);
imagedestroy($im2);
if($needDel==true)
{
@unlink($src_img);
}
return $file;
}
}
/***********For example**********/
$pic=resize("images/1.jpg",210,140,"../upload/",true);
?>
生成图片缩略图的函数
PHP代码:
<?php
/*
生产缩略图主函数,返回缩略图路径
@src1:图片地址
@w,@h:缩略图宽高
@path:缩略图保存路径
@needDel:生产缩略图后是否删除原图
*/
function resize($src1,$w,$h,$path,$needDel)
{
$info=getimagesize($src1);
$width=$info[0];
$height=$info[1];
$imageType=$info[2];
$im=create($src1,$imageType);
$per1=round($width/$height,2);//计算原图长宽比
$per2=round($w/$h,2);//计算缩略图长宽比
if($per1>$per2)
{
$per=$w/$width;
}
if($per1<$per2)
{
$per=$h/$height;
}
if($per1==$per2)
{
$per=$w/$width;
}
$temp_w=intval($width*$per);//计算原图缩放后的宽度
$temp_h=intval($height*$per);//计算原图缩放后的高度
$temp_img=imagecreatetruecolor($temp_w,$temp_h);
if($per1>$per2)
{
//宽度优先
imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
$newName=$path.rename2($src1,false);
imagejpeg($temp_img,$newName);
//在缩放之后高度不足的情况下补上背景
return addBg($newName,$w,$h,"w",$path,$needDel);
}
if($per1==$per2)
{
//等比缩放
imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
$newName=$path.rename2($src1,false);
imagejpeg($temp_img,$newName);
imagedestroy($temp_img);
imagedestroy($im);
return $newName;
}
if($per1<$per2)
{
//高度优先
imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);
$newName=$path.rename2($src1,false);//一次生成
imagejpeg($temp_img,$newName);
//在缩放之后宽度不足的情况下补上背景
return addBg($newName,$w,$h,"h",$path,$needDel);
}
}
/*
重名名文件
*/
function rename2($file,$re=true)
{
$info=pathinfo($file);
if($re)
{
$filename=rtrim($info["basename"],".".$info["extension"]);
return $filename."_2.".$info["extension"];
}
else
{
return $info["basename"];
}
}
function create($src,$imagetype)
{
switch($imagetype)
{
case 1 :
$im = imagecreatefromgif($src);
break;
case 2 :
$im = imagecreatefromjpeg($src);
break;
case 3 :
$im = imagecreatefrompng($src);
break;
}
return $im;
}
/*
添加背景
@src_img:图片src
@w:宽
@h:高
@first:决定宽度还是高度优先
@path:缩略图保存的位置
@needDel:是否删除原图
*/
function addBg($src_img,$w,$h,$fisrt="w",$path,$needDel=false)
{
$bg=imagecreatetruecolor($w,$h);
$white = imagecolorallocate($bg,255,255,255);
imagefill($bg,0,0,$white);
$temp_info=getimagesize($src_img);
$im2=create($src_img,$temp_info[2]);
$width2=$temp_info[0];
$height2=$temp_info[1];
if($fisrt=="w")
{
//宽度优先,解决缩放后高度不足
$y=($h-$height2)/2;
imagecopymerge($bg,$im2,0,$y,0,0,$width2,$height2,100);
$file=$path.rename2($src_img,1);
imagejpeg($bg,$file);
imagedestroy($bg);
imagedestroy($im2);
if($needDel==true)
{
@unlink($src_img);
}
return $file;
}
if($fisrt=="wh")
{
//等比缩放
return $src_img;
}
if($fisrt=="h")
{
$x=($w-$width2)/2;
//高度优
imagecopymerge($bg,$im2,$x,0,0,0,$width2,$height2,100);
$file=$path.rename2($src_img,1);
imagejpeg($bg,$file);
imagedestroy($bg);
imagedestroy($im2);
if($needDel==true)
{
@unlink($src_img);
}
return $file;
}
}
/***********For example**********/
$pic=resize("images/1.jpg",210,140,"../upload/",true);
?>
作者:jane@淘宝网女装新款秋装连衣裙裤子外套上衣_2012时尚女装新款 Ecmall二次开发-PHP技术
地址:http://www.laohucheng.com/post/299/
版权所有©转载时必须以链接形式注明作者和原始出处及本声明!
自适应内嵌页面高度
左菜单收缩
2009
08:27
484
0


