PHP制作縮略圖
1、制作縮略圖的函數
imagecopyresampled(dest,src,dx,dy,sx,sy,dw,dh,sw,sh)
說明:
dest 目標畫布
src 原圖(要縮略的圖片)
dx,dy 目標畫布上的一個點
sx,sy 原圖上的一個點
dw,dh 畫布的 寬高
sw,sh 原圖的寬高
從src原圖上以sx,sy為左上角,取寬為sw,高為sh的區域,放在dest畫布上,以dx,dy為左上角,寬為dw,高為dh的區域。
2、制作的原理
生成縮略圖,關鍵的是如何計算縮放比率。
1、畫布的高/畫布的寬>原圖的高/原圖的寬
也就是下圖這種情況: 縮放比率 = 新圖寬度 / 原圖寬度

2、原圖的高/原圖的寬>畫布的高/畫布的寬
也就是下圖這種情況:縮放比率 = 新圖高度 / 原圖高度

3、具體代碼
function thumb($file,$dw,$dh,$path){//這四個參數分別是1、要縮略的圖片,2、畫布的寬(也就是你要縮略的寬)3、畫布的高(也就是你要縮略的高),4、保存路徑) //獲取用戶名圖 $srcImg=$this->getImg($file);//調用下面那個函數,實現根據圖片類型來創建不同的圖片畫布 //獲取原圖的寬高 $infoSrc=getimagesize($file);//這個getimagesize()是php里面的系統函數用來獲取圖片的具體信息的 $sw=$infoSrc[0];//獲取要縮略圖片的寬 $sh=$infoSrc[1];。。獲取要縮略的圖片的高 //創建縮略圖畫布 $destImg=imagecreatetruecolor($dw, $dh); //為縮略圖填充背景色 $bg=imagecolorallocate($destImg,250,250,250); imagefill($destImg,0,0,$bg); //計算例縮放的尺寸 if($dh/$dw>$sh/$sw){ $fw=$dw; $fh=$sh/$sw*$fw; }else{ $fh=$dh; $fw=$fh*$sw/$sh; } //居中放置 $dx=($dw-$fw)/2; $dy=($dh-$fh)/2; //創建縮略圖 imagecopyresampled($destImg, $srcImg, 0, 0, 0, 0 ,$fw, $fh,$sw, $sh); $baseName='thumb_'.basename($file);//給縮略的圖片命名,basename()是系統內置函數用來獲取后綴名的 $savePath=$path.'/'.$baseName;//設置縮略圖片保存路徑 imagejpeg($destImg,$savePath)//把縮略圖存放到上一步設置的保存路徑里 } function getImg($file){//這是以一個動態創建圖片畫布的函數(根據具體的圖片類型創相應類型的畫布) $info=getimagesize($file); $fn=$info['mime'];//獲得圖片類型; switch($fn){ case 'image/jpeg'://如果類型是imag/jpeg就創建jpeg類型的畫布 $img=imagecreatefromjpeg($file); break; case 'image/gif': $img=imagecreatefromgif($file);//如果類型是gif就創建gif類型的畫布 case 'image/png': $img=imagecreatefrompng($file);//如果類型是png就創建png類型的畫布 break; } return $img;//返回畫布類型 }
