技術文章
      PHP實現圖片壓縮并同時保持清晰度
      發布日期:2019-06-29 閱讀次數:2257 字體大小:

      圖片太大是一個經常遇到的問題,為此很多人頭疼。今天告訴大家如何實現PHP程序簡單實現壓縮:

      圖片原大小:6M

      壓縮后:2M

       

      圖片原圖越大,越能體現出壓縮來。

      現在附上代碼:

      
      /**
       * 圖片壓縮類:通過縮放來壓縮。
       * 如果要保持源圖比例,把參數$percent保持為1即可。
       * 即使原比例壓縮,也可大幅度縮小。數碼相機4M圖片。也可以縮為700KB左右。如果縮小比例,則體積會更小。
       *
       * 結果:可保存、可直接顯示。
       */
      class imgcompress{
          private $src;
          private $image;
          private $imageinfo;
          private $percent = 0.5;
          /**
           * 圖片壓縮
           * @param $src 源圖
           * @param float $percent  壓縮比例
           */
          public function __construct($src, $percent=1)
          {
              $this->src = $src;
              $this->percent = $percent;
          }
          /** 高清壓縮圖片
           * @param string $saveName  提供圖片名(可不帶擴展名,用源圖擴展名)用于保存。或不提供文件名直接顯示
           */
          public function compressImg($saveName='')
          {
              $this->_openImage();
              if(!empty($saveName)) $this->_saveImage($saveName);  //保存
              else $this->_showImage();
          }
          /**
           * 內部:打開圖片
           */
          private function _openImage()
          {
              list($width, $height, $type, $attr) = getimagesize($this->src);
              $this->imageinfo = array(
                  'width'=>$width,
                  'height'=>$height,
                  'type'=>image_type_to_extension($type,false),
                  'attr'=>$attr
              );
              $fun = "imagecreatefrom".$this->imageinfo['type'];
              $this->image = $fun($this->src);
              $this->_thumpImage();
          }
          /**
           * 內部:操作圖片
           */
          private function _thumpImage()
          {
              $new_width = $this->imageinfo['width'] * $this->percent;
              $new_height = $this->imageinfo['height'] * $this->percent;
              $image_thump = imagecreatetruecolor($new_width,$new_height);
              //將原圖復制帶圖片載體上面,并且按照一定比例壓縮,極大的保持了清晰度
              imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);
              imagedestroy($this->image);
              $this->image = $image_thump;
          }
          /**
           * 輸出圖片:保存圖片則用saveImage()
           */
          private function _showImage()
          {
              header('Content-Type: image/'.$this->imageinfo['type']);
              $funcs = "image".$this->imageinfo['type'];
              $funcs($this->image);
          }
          /**
           * 保存圖片到硬盤:
           * @param  string $dstImgName  1、可指定字符串不帶后綴的名稱,使用源圖擴展名 。2、直接指定目標圖片名帶擴展名。
           */
          private function _saveImage($dstImgName)
          {
              if(empty($dstImgName)) return false;
              $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif'];   //如果目標圖片名有后綴就用目標圖片擴展名 后綴,如果沒有,則用源圖的擴展名
              $dstExt =  strrchr($dstImgName ,".");
              $sourseExt = strrchr($this->src ,".");
              if(!empty($dstExt)) $dstExt =strtolower($dstExt);
              if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);
              //有指定目標名擴展名
              if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
                  $dstName = $dstImgName;
              }elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
                  $dstName = $dstImgName.$sourseExt;
              }else{
                  $dstName = $dstImgName.$this->imageinfo['type'];
              }
              $funcs = "image".$this->imageinfo['type'];
              $funcs($this->image,$dstName);
          }
          /**
           * 銷毀圖片
           */
          public function __destruct(){
              imagedestroy($this->image);
          }
      }
      $source =  '123.png';//原圖片名稱
      $dst_img = 'text.png';//壓縮后圖片的名稱
      $percent = 1;  #原圖壓縮,不縮放,但體積大大降低
      $image = (new imgcompress($source,$percent))->compressImg($dst_img);
      主站蜘蛛池模板: 在线看片你懂的| 日韩免费视频一区二区| 天天操2018| 亚洲精品nv久久久久久久久久| 2020狠狠操| 成人影院在线观看视频| 人欧美一区二区三区视频xxx| 999精品在线| 最近中文字幕mv免费高清视频7| 国产在线观看91精品不卡| a级精品国产片在线观看| 欧美日韩一区二区三区四区在线观看| 国产成人精品午夜二三区波多野| 久久久精品国产免大香伊| 精品久久久无码人妻中文字幕豆芽 | 国产一区在线mmai| 一级做a爰片性色毛片中国| 爱情岛讨论坛线路亚洲高品质 | 久久婷婷五月综合色国产香蕉| 美女扒开尿口给男人桶爽视频| 大胸美女洗澡扒奶衣挤奶| 亚洲一区二区三区播放在线| 色综合久久久无码中文字幕| 女人18与19毛片免费| 久久国产精品99精品国产| 欧美大黑帍在线播放| 人妻无码一区二区三区免费| 脱了美女内裤猛烈进入gif| 国产成人涩涩涩视频在线观看| 一级毛片视频免费观看| 日韩毛片最新看| 亚洲日韩乱码中文无码蜜桃臀| 男女无遮挡边摸边吃边做| 国产精品99无码一区二区| 丰满老熟妇好大bbbbb| 熟妇人妻无码XXX视频| 国产成人久久一区二区三区| 97色伦图片97综合影院| 好男人影视在线WWW官网| 中文字幕在线观看第一页| 欧美日韩国产另类在线观看|