图片压缩

说明 
在项目中,经常会遇到在前端页面展示用户自己上传的图片。当部分图片尺寸过大,页面图片过多的情况下(如论坛里需要显示用户头像),会引起页面加载缓慢的问题。由于用户图片已存储导数据库,无法改变库里的图片大小,只能在获取图片路径时,压缩图片

示例 
以下函数为图片压缩方法

/**
 * 图片压缩处理
 * @param string $sFile 图片路径
 * @param int $iWidth 自定义图片宽度
 * @param int $iHeight 自定义图片高度 */ function getThumb($sFile,$iWidth,$iHeight){ //判断该图片是否存在 if(!file_exists(public_path().$sFile)) return $sFile; //判断图片格式 $attach_fileext = get_filetype($sFile); if (!in_array($attach_fileext, array('jpg','png','jpeg'))){ return $sFile; } //压缩图片 $sFileNameS = str_replace(".".$attach_fileext, "_".$iWidth.'_'.$iHeight.'.'.$attach_fileext, $sFile); //判断是否已压缩图片,若是则返回压缩图片路径 if(file_exists(public_path().$sFileNameS)){ return $sFileNameS; } //解决手机端上传图片被旋转问题 if (in_array($attach_fileext, array('jpeg')) ){ adjustPicOrientation(public_path().$sFile); } //生成压缩图片,并存储到原图同路径下 resizeImage(public_path().$sFile, public_path().$sFileNameS, $iWidth, $iHeight); if(!file_exists(public_path().$sFileNameS)){ return $sFile; } return $sFileNameS; } /** *获取文件后缀名 */ function get_filetype($filename) { $extend = explode("." , $filename); return strtolower($extend[count($extend) - 1]); } /** * 解决手机上传图片被旋转问题 * @param string $full_filename 文件路径 */ function adjustPicOrientation($full_filename){ $exif = exif_read_data($full_filename); if($exif && isset($exif['Orientation'])) { $orientation = $exif['Orientation']; if($orientation != 1){ $img = imagecreatefromjpeg($full_filename); $mirror = false; $deg = 0; switch ($orientation) { case 2: $mirror = true; break; case 3: $deg = 180; break; case 4: $deg = 180; $mirror = true; break; case 5: $deg = 270; $mirror = true; break; case 6: $deg = 270; break; case 7: $deg = 90; $mirror = true; break; case 8: $deg = 90; break; } if ($deg) $img = imagerotate($img, $deg, 0); if ($mirror) $img = _mirrorImage($img); //$full_filename = str_replace('.jpg', "-O$orientation.jpg", $full_filename);新文件名 imagejpeg($img, $full_filename, 95); } } return $full_filename; } resizeImage(public_path().$sFile, public_path().$sFileNameS, $iWidth, $iHeight); /** * 生成图片 * @param string $im 源图片路径 * @param string $dest 目标图片路径 * @param int $maxwidth 生成图片宽 * @param int $maxheight 生成图片高 */ function resizeImage($im, $dest, $maxwidth, $maxheight) { $img = getimagesize($im); switch ($img[2]) { case 1: $im = @imagecreatefromgif($im); break; case 2: $im = @imagecreatefromjpeg($im); break; case 3: $im = @imagecreatefrompng($im); break; } $pic_width = imagesx($im); $pic_height = imagesy($im); $resizewidth_tag = false; $resizeheight_tag = false; if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) { if ($maxwidth && $pic_width > $maxwidth) { $widthratio = $maxwidth / $pic_width; $resizewidth_tag = true; } if ($maxheight && $pic_height > $maxheight) { $heightratio = $maxheight / $pic_height; $resizeheight_tag = true; } if ($resizewidth_tag && $resizeheight_tag) { if ($widthratio < $heightratio) $ratio = $widthratio; else $ratio = $heightratio; } if ($resizewidth_tag && !

转载于:https://www.cnblogs.com/jierong12/p/9075975.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值