php上传图片并压缩的实现方法


Posted in PHP onDecember 22, 2015

本文实例讲解了php上传图片并压缩的实现方法,之前一篇《PHP实现图片上传并压缩》已经为大家进行了简单介绍,此次实现上传图片然后按照比例缩略图,指定缩略图的最大高度或者最大宽度,具体内容如下

实现代码:

<?php 
function _UPLOADPIC($upfile, $maxsize, $updir, $newname = 'date') { 
  
 if ($newname == 'date') 
 $newname = date ( "Ymdhis" ); //使用日期做文件名 
 $name = $upfile ["name"]; 
 $type = $upfile ["type"]; 
 $size = $upfile ["size"]; 
 $tmp_name = $upfile ["tmp_name"]; 
  
 switch ($type) { 
 case 'image/pjpeg' : 
 case 'image/jpeg' : 
  $extend = ".jpg"; 
  break; 
 case 'image/gif' : 
  $extend = ".gif"; 
  break; 
 case 'image/png' : 
  $extend = ".png"; 
  break; 
 } 
 if (emptyempty ( $extend )) { 
 echo ( "警告!只能上传图片类型:GIF JPG PNG" ); 
 exit (); 
 } 
 if ($size > $maxsize) { 
 $maxpr = $maxsize / 1000; 
 echo ( "警告!上传图片大小不能超过" . $maxpr . "K!" ); 
 exit (); 
 } 
 if (move_uploaded_file ( $tmp_name, $updir . $newname . $extend )) { 
 return $updir . $newname . $extend; 
 } 
} 
 
function show_pic_scal($width, $height, $picpath) { 
 $imginfo = GetImageSize ( $picpath ); 
 $imgw = $imginfo [0]; 
 $imgh = $imginfo [1]; 
  
 $ra = number_format ( ($imgw / $imgh), 1 ); //宽高比 
 $ra2 = number_format ( ($imgh / $imgw), 1 ); //高宽比 
  
 
 if ($imgw > $width or $imgh > $height) { 
 if ($imgw > $imgh) { 
  $newWidth = $width; 
  $newHeight = round ( $newWidth / $ra ); 
  
 } elseif ($imgw < $imgh) { 
  $newHeight = $height; 
  $newWidth = round ( $newHeight / $ra2 ); 
 } else { 
  $newWidth = $width; 
  $newHeight = round ( $newWidth / $ra ); 
 } 
 } else { 
 $newHeight = $imgh; 
 $newWidth = $imgw; 
 } 
 $newsize [0] = $newWidth; 
 $newsize [1] = $newHeight; 
  
 return $newsize; 
} 
 
 
 
function getImageInfo($src) 
{ 
 return getimagesize($src); 
} 
/** 
* 创建图片,返回资源类型 
* @param string $src 图片路径 
* @return resource $im 返回资源类型 
* **/ 
function create($src) 
{ 
 $info=getImageInfo($src); 
 switch ($info[2]) 
 { 
 case 1: 
  $im=imagecreatefromgif($src); 
  break; 
 case 2: 
  $im=imagecreatefromjpeg($src); 
  break; 
 case 3: 
  $im=imagecreatefrompng($src); 
  break; 
 } 
 return $im; 
} 
/** 
* 缩略图主函数 
* @param string $src 图片路径 
* @param int $w 缩略图宽度 
* @param int $h 缩略图高度 
* @return mixed 返回缩略图路径 
* **/ 
 
function resize($src,$w,$h) 
{ 
 $temp=pathinfo($src); 
 $name=$temp["basename"];//文件名 
 $dir=$temp["dirname"];//文件所在的文件夹 
 $extension=$temp["extension"];//文件扩展名 
 $savepath="{$dir}/{$name}";//缩略图保存路径,新的文件名为*.thumb.jpg 
 
 //获取图片的基本信息 
 $info=getImageInfo($src); 
 $width=$info[0];//获取图片宽度 
 $height=$info[1];//获取图片高度 
 $per1=round($width/$height,2);//计算原图长宽比 
 $per2=round($w/$h,2);//计算缩略图长宽比 
 
 //计算缩放比例 
 if($per1>$per2||$per1==$per2) 
 { 
 //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先 
 $per=$w/$width; 
 } 
 if($per1<$per2) 
 { 
 //原图长宽比小于缩略图长宽比,则按照高度优先 
 $per=$h/$height; 
 } 
 $temp_w=intval($width*$per);//计算原图缩放后的宽度 
 $temp_h=intval($height*$per);//计算原图缩放后的高度 
 $temp_img=imagecreatetruecolor($temp_w,$temp_h);//创建画布 
 $im=create($src); 
 imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); 
 if($per1>$per2) 
 { 
 imagejpeg($temp_img,$savepath, 100); 
 imagedestroy($im); 
 return addBg($savepath,$w,$h,"w"); 
 //宽度优先,在缩放之后高度不足的情况下补上背景 
 } 
 if($per1==$per2) 
 { 
 imagejpeg($temp_img,$savepath, 100); 
 imagedestroy($im); 
 return $savepath; 
 //等比缩放 
 } 
 if($per1<$per2) 
 { 
 imagejpeg($temp_img,$savepath, 100); 
 imagedestroy($im); 
 return addBg($savepath,$w,$h,"h"); 
 //高度优先,在缩放之后宽度不足的情况下补上背景 
 } 
} 
/** 
* 添加背景 
* @param string $src 图片路径 
* @param int $w 背景图像宽度 
* @param int $h 背景图像高度 
* @param String $first 决定图像最终位置的,w 宽度优先 h 高度优先 wh:等比 
* @return 返回加上背景的图片 
* **/ 
function addBg($src,$w,$h,$fisrt="w") 
{ 
 $bg=imagecreatetruecolor($w,$h); 
 $white = imagecolorallocate($bg,255,255,255); 
 imagefill($bg,0,0,$white);//填充背景 
 
 //获取目标图片信息 
 $info=getImageInfo($src); 
 $width=$info[0];//目标图片宽度 
 $height=$info[1];//目标图片高度 
 $img=create($src); 
 if($fisrt=="wh") 
 { 
 //等比缩放 
 return $src; 
 } 
 else 
 { 
 if($fisrt=="w") 
 { 
  $x=0; 
  $y=($h-$height)/2;//垂直居中 
 } 
 if($fisrt=="h") 
 { 
  $x=($w-$width)/2;//水平居中 
  $y=0; 
 } 
 imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100); 
 imagejpeg($bg,$src,100); 
 imagedestroy($bg); 
 imagedestroy($img); 
 return $src; 
 } 
 
} 
 
 
?>

使用方法:

$filename=(_UPLOADPIC($_FILES["upload"],$maxsize,$updir,$newname='date')); 
 $show_pic_scal=show_pic_scal(230, 230, $filename); 
 resize($filename,$show_pic_scal[0],$show_pic_scal[1]);

希望本文所述对大家学习php程序设计有所帮助。

PHP 相关文章推荐
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
PHP的5个安全措施小结
Jul 17 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
PHP的魔术常量__METHOD__简介
Jul 08 PHP
PHP之uniqid()函数用法
Nov 03 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
php自定义时间转换函数示例
Dec 07 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP实现图片上传并压缩
Dec 22 #PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 #PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 #PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 #PHP
反射调用private方法实践(php、java)
Dec 21 #PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 #PHP
变量在 PHP7 内部的实现(二)
Dec 21 #PHP
You might like
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
详解vue中axios的封装
2018/07/18 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
在vue中安装使用vux的教程详解
2018/09/16 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python中对_init_的理解及实例解析
2019/10/11 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
scrapy头部修改的方法详解
2020/12/06 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
劲霸男装广告词改编版
2014/03/21 职场文书
孩子教育的心得体会
2014/09/01 职场文书
革命电影观后感
2015/06/18 职场文书
2019各种保证书范文
2019/06/24 职场文书