您好,登錄后才能下訂單哦!
小編給大家分享一下php如何實現上傳圖片生成縮略圖,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
代碼如下:
<?php /** * 上傳圖片生成縮略圖 * * 需要GD2庫的支持 * * 初始化時需要參數new thumbnails('需要縮略的圖片的原始地址','縮略圖的寬度','縮略圖的高度','(可選參數)縮略圖的保存路徑'); * 如果最后一個參數不指定,那么縮略圖就默認保存在原始圖片的所在目錄里的small文件夾里, * 如果不存在small文件夾,則會自動創建small文件夾 * * 初始化之后需要調用方法produce創建縮略圖 * $thumbnails = new thumbnails(''....); * $thumbnails->produce(); * * 其中可以獲取原始圖片的相關信息,寬度、高度、和圖片mime * * $thumbnails->getImageWidth(); //int 圖片寬度 * $thumbnails->getImageHeight(); // int 圖片高度 * $thumbnails->getImageMime(); // string 圖片的mime * * $thumbnails->trueSize(); //array 這是一個包含圖片等比例縮略之后的寬度和高度值的數組 * $size = array('width'=>'','height'=>''); * 獲取圖片等比縮略之后的寬度和高度 * $size['width']//等比縮略圖的寬度 * $size['height']//等比縮略圖的高度 * */ class thumbnails{ private $imgSrc; //圖片的路徑 private $saveSrc; //圖片的保存路徑,默認為空 private $canvasWidth; //畫布的寬度 private $canvasHeight; //畫布的高度 private $im; //畫布資源 private $dm; //復制圖片返回的資源 /** * 初始化類,加載相關設置 * * @param $imgSrc 需要縮略的圖片的路徑 * @param $canvasWidth 縮略圖的寬度 * @param $canvasHeight 縮略圖的高度 */ public function __construct($imgSrc,$canvasWidth,$canvasHeight,$saveSrc=null) { $this->imgSrc = $imgSrc; $this->canvasWidth = $canvasWidth; $this->canvasHeight = $canvasHeight; $this->saveSrc = $saveSrc; } /** * 生成縮略圖 */ public function produce() { $this->createCanvas(); $this->judgeImage(); $this->copyImage(); $this->headerImage(); } /** * 獲取載入圖片的信息 * * 包含長度、寬度、圖片類型 * * @return array 包含圖片長度、寬度、mime的數組 */ private function getImageInfo() { return getimagesize($this->imgSrc); } /** * 獲取圖片的長度 * * @return int 圖片的寬度 */ public function getImageWidth() { $imageInfo = $this->getImageInfo(); return $imageInfo['0']; } /** * 獲取圖片高度 * * @return int 圖片的高度 */ public function getImageHeight() { $imageInfo = $this->getImageInfo(); return $imageInfo['1']; } /** * 獲取圖片的類型 * * @return 圖片的mime值 */ public function getImageMime() { $imageInfo = $this->getImageInfo(); return $imageInfo['mime']; } /** * 創建畫布 * * 同時將創建的畫布資源放入屬性$this->im中 */ private function createCanvas() { $size = $this->trueSize(); $this->im = imagecreatetruecolor($size['width'],$size['height']); } /** * 判斷圖片的mime值,確定使用的函數 * * 同時將創建的圖片資源放入$this->dm中 */ private function judgeImage() { $mime = $this->getImageMime(); switch ($mime) { case 'image/png':$dm = imagecreatefrompng($this->imgSrc); break; case 'image/gif':$dm = imagecreatefromgif($this->imgSrc); break; case 'image/jpg':$dm = imagecreatefromjpeg($this->imgSrc); break; case 'image/jpeg':$dm = imagecreatefromgjpeg($this->imgSrc); break; } $this->dm = $dm; } /** * 判斷圖片縮略后的寬度和高度 * * 此寬度和高度也作為畫布的尺寸 * * @return array 圖片經過等比例縮略之后的尺寸 */ public function trueSize() { $proportionW = $this->getImageWidth() / $this->canvasWidth; $proportionH = $this->getImageHeight() / $this->canvasHeight; if( ($this->getImageWidth() < $this->canvasWidth) && ($this->getImageHeight() < $this->canvasHeight) ) { $trueSize = array('width'=>$this->getImageWidth(),'height'=>$this->getImageHeight()); } elseif($proportionW >= $proportionH) { $trueSize = array('width'=>$this->canvasWidth,'height'=>$this->getImageHeight() / $proportionW); } else { $trueSize = array('width'=>$this->getImageWidth() / $proportionH,'height'=>$this->canvasHeight); } return $trueSize; } /** * 將圖片復制到新的畫布上面 * * 圖片會被等比例的縮放,不會變形 */ private function copyImage() { $size = $this->trueSize(); imagecopyresized($this->im, $this->dm , 0 , 0 , 0 , 0 , $size['width'] , $size['height'] , $this->getImageWidth() , $this->getImageheight()); } /** * 將圖片輸出 * * 圖片的名稱默認和原圖片名稱相同 * * 路徑為大圖片當前目錄下的small目錄內 * * 如果small目錄不存在,則會自動創建 */ public function headerImage() { $position = strrpos($this->imgSrc,'/'); $imageName = substr($this->imgSrc,($position + 1)); if($this->saveSrc) { $imageFlode = $this->saveSrc.'/'; } else { $imageFlode = substr($this->imgSrc,0,$position).'/small/'; } if(!file_exists($imageFlode)) { mkdir($imageFlode); } $saveSrc = $imageFlode.$imageName; imagejpeg($this->im,$saveSrc); } }
看完了這篇文章,相信你對“php如何實現上傳圖片生成縮略圖”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。