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
代码如下:
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; }
相关文章推荐
- PHP Calendar API方法归纳总结
- 关于用php读取excl表格列超过Z后的解决方法
- PHP加密技术
- PHP学习计划
- laravel中数据库迁移
- **PHP** 文件操作
- laravel5.1 安装debug插件
- **PHP** 多维数组和日期
- php 的mysql操作类
- thinkphp 缓存的灵活使用
- php 发送 email
- 解决phpmyadmin数据文件导入有限制的问题(只能导入2M以下)
- php发送邮件email
- php进程管理
- PHP下載網址
- 【php:thinkphp 】URL重定向
- Yii调试查看执行SQL语句的方法
- CodeIgniter框架源码笔记(5)——识别多种URI风格:地址解析类URI.php
- **PHP** 表单(2)-表单完成
- PHP中FTP相关函数小结