PHP實現圖片壓縮同時保持清晰度 阿星小棧

圖片太大是一個常常遇到的問題,爲此不少人頭疼。今天告訴你們如何實現PHP程序簡單實現壓縮:php

圖片原大小:this

image.png

壓縮後:spa

image.png

這是我本身實驗的,能夠處理多種圖片格式。.net

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

使用方法:blog

Php代碼  
$source =  'test.jpg';  
$dst_img = 'test_111.jpg';  
$percent = 1;  #原圖壓縮,不縮放,但體積大大下降  
$image = (new imgcompress($source,$percent))->compressImg($dst_img); 

 

相關類文件以下,保存爲imgcompress.class.php (類庫來源:維易PHP培訓圖片

Php代碼  
<?php  
  
/** 
 * 圖片壓縮類:經過縮放來壓縮。 
* 若是要保持源圖比例,把參數$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(!emptyempty($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  一、可指定字符串不帶後綴的名稱,使用源圖擴展名 。二、直接指定目標圖片名帶擴展名。 
        */  
       private function _saveImage($dstImgName)  
       {  
              if(emptyempty($dstImgName)) return false;  
              $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif'];   //若是目標圖片名有後綴就用目標圖片擴展名 後綴,若是沒有,則用源圖的擴展名  
              $dstExt =  strrchr($dstImgName ,".");  
              $sourseExt = strrchr($this->src ,".");  
              if(!emptyempty($dstExt)) $dstExt =strtolower($dstExt);  
              if(!emptyempty($sourseExt)) $sourseExt =strtolower($sourseExt);  
  
              //有指定目標名擴展名  
              if(!emptyempty($dstExt) && in_array($dstExt,$allowImgs)){  
                     $dstName = $dstImgName;  
              }elseif(!emptyempty($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);  
       }  
  
}  

 

援引:http://sylearning.iteye.com/blog/2368860字符串

          http://blog.csdn.net/qq_36608163/article/details/73167284get

相關文章
相關標籤/搜索