PHP

当前位置:首页 > PHP

php实现图片压缩处理 - PHP

本文实例为大家分享了php实现图片压缩处理的具体代码,供大家参考,具体内容如下说明 在项目中,经常会遇到在前端页面展示用户自己上传的图片。当部分图片尺寸过大,页面图片...

本文实例为大家分享了php实现图片压缩处理的具体代码,供大家参考,具体内容如下

说明

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

示例

以下函数为图片压缩方法

/** * 图片压缩处理 * @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 && !$resizeheight_tag)      $ratio = $widthratio;    if ($resizeheight_tag && !$resizewidth_tag)      $ratio = $heightratio;    $newwidth = $pic_width * $ratio;    $newheight = $pic_height * $ratio;    if (function_exists("imagecopyresampled")) {      $newim = imagecreatetruecolor($newwidth, $newheight);      imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);    } else {      $newim = imagecreate($newwidth, $newheight);      imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);    }    imagejpeg($newim, $dest);    imagedestroy($newim);  } else {    imagejpeg($im, $dest);  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持来客网。

相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

评论排行榜

热门标签