您的位置:首页 > 编程语言 > PHP开发

php等比缩放图片

2016-07-15 22:54 821 查看
步骤如下:

1.获取图片的基本信息

用这个getimagesize函数

2.判断图片资源类型并创建对应图片资源

用这个getPicType函数(自定义函数)

3.计算缩放比例

原则是取最小的缩放系数.例如:800*600的图片,缩放到200*200以下,则缩放系数为scale=200/800>200/600?200/600:200/800; 因为1/4 < 1/3 所以选用1/4的缩放系数

4.计算缩放后的尺寸

wdith = floor(800*1/4);向下取整

height = floor(600*1/4);

结果缩放后的图片变为200*150

5.创建目标图像资源

用这个imagecreatetruecolor函数,创建一个真彩的图像

6.等比缩放

用这个imagecopyresampled函数实现缩放

7.输出图像

用这个outputImage函数(自定义函数)

8.释放图片资源

用这个imagedestroy函数

缩放前后如图:

750*525



200*140



代码如下:

/**
* @function 等比缩放函数(以保存的方式实现)
* @param string $picname 被缩放的处理图片源
* @param int $maxX 缩放后图片的最大宽度
* @param int $maxY 缩放后图片的最大高度
* @param string $pre 缩放后图片名的前缀名
* @return string 返回后的图片名称(带路径),如a.jpg --> s_a.jpg
*/
function scalePic($picname,$maxX=100,$maxY=100,$pre='s_')
{
$info = getimagesize($picname); //获取图片的基本信息
$width = $info[0];//获取宽度
$height = $info[1];//获取高度
//判断图片资源类型并创建对应图片资源
$im = getPicType($info[2],$picname);
//计算缩放比例
$scale = ($maxX/$width)>($maxY/$height)?$maxY/$height:$maxX/$width;
//计算缩放后的尺寸
$sWidth = floor($width*$scale);
$sHeight = floor($height*$scale);
//创建目标图像资源
$nim = imagecreatetruecolor($sWidth,$sHeight);
//等比缩放
imagecopyresampled($nim,$im,0,0,0,0,$sWidth,$sHeight,$width,$height);
//输出图像
$newPicName = outputImage($picname,$pre,$nim);
//释放图片资源
imagedestroy($im);
imagedestroy($nim);
return $newPicName;
}

/**
* function 判断并返回图片的类型(以资源方式返回)
* @param int $type 图片类型
* @param string $picname 图片名字
* @return 返回对应图片资源
*/
function getPicType($type,$picname)
{
$im=null;
switch($type)
{
case 1:  //GIF
$im = imagecreatefromgif($picname);
break;
case 2:  //JPG
$im = imagecreatefromjpeg($picname);
break;
case 3:  //PNG
$im = imagecreatefrompng($picname);
break;
case 4:  //BMP
$im = imagecreatefromwbmp($picname);
break;
default:
die("不认识图片类型");
break;
}
return $im;
}

/**
* function 输出图像
* @param string $picname 图片名字
* @param string $pre 新图片名前缀
* @param resourse $nim 要输出的图像资源
* @return 返回新的图片名
*/
function outputImage($picname,$pre,$nim)
{
$info = getimagesize($picname);
$picInfo = pathInfo($picname);
$newPicName = $picInfo['dirname'].'/'.$pre.$picInfo['basename'];//输出文件的路径
switch($info[2])
{
case 1:
imagegif($nim,$newPicName);
break;
case 2:
imagejpeg($nim,$newPicName);
break;
case 3:
imagepng($nim,$newPicName);
break;
case 4:
imagewbmp($nim,$newPicName);
break;
}
return $newPicName;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: