侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

php  /  管理员 发布于 7年前   135

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

实现代码:

 $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中10个不同等级压缩优化图片操作示例
  • PHP 实现等比压缩图片尺寸和大小实例代码
  • php gd等比例缩放压缩图片函数
  • 基于PHP实现等比压缩图片大小
  • PHP实现图片上传并压缩
  • php高清晰度无损图片压缩功能的实现代码


  • 上一条:
    服务器迁移php版本不同可能诱发的问题
    下一条:
    PHP实现图片上传并压缩
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客