• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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);
      }
    }

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

    您可能感兴趣的文章:
    • PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
    • php使用高斯算法实现图片的模糊处理功能示例
    • php封装的图片(缩略图)处理类完整实例
    • 分享php多功能图片处理类
    • php常用图片处理类
    • 功能强大的PHP图片处理类(水印、透明度、旋转)
    • php+curl 发送图片处理代码分享
    • 常用的php图片处理类(水印、等比缩放、固定高宽)分享
    • PHP 图片处理
    上一篇:如何在PHP中读写文件
    下一篇:PHP获取类私有属性的3种方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php实现图片压缩处理 php,实现,图片,压缩,处理,