代碼:php
1 <?php 2 class CImage{ 3 /** 4 * 生成縮略圖 5 * @param $srcFile (string) 參數說明:源文件路徑 6 * @param $size int 縮略圖的大小,默認值150 7 * @param $is_square bool 是否正方形,默認值false 8 * @param $quality int 爲可選項,範圍從 0(最差質量,文件更小)到 100(最佳質量,文件最大)。默認爲 IJG 默認的質量值(大約 75)。 9 */ 10 public function create_thumbnails($srcFile, $dstFile, $size = 150, $is_square = false, $quality = 75){ 11 if(file_exists($srcFile)){ 12 //返回含有4個單元的數組,0-寬,1-高,2-圖像類型,3-寬高的文本描述。 13 $data = getimagesize($srcFile); 14 //將文件載入到資源變量im中 15 switch ($data[2]){ //1-GIF,2-JPG,3-PNG 16 case 1: 17 $im = imagecreatefromgif($srcFile); 18 break; 19 case 2: 20 $im = imagecreatefromjpeg($srcFile); 21 break; 22 case 3: 23 $im = imagecreatefrompng($srcFile); 24 break; 25 } 26 if(!$im){ 27 return false; 28 } 29 //設置標記以在保存 PNG 圖像時保存完整的 alpha 通道信息(與單一透明色相反) 30 imagesavealpha($im, true); 31 // 32 $srcW = imagesx($im); 33 $srcH = imagesy($im); 34 $srcX = $srcY = 0; 35 if($is_square == true){ 36 if($srcH >= $srcW){ 37 $srcX = 0; 38 $srcY = floor(($srcH - $srcW) / 2); 39 $srcH = $srcW; 40 }else { 41 $srcY = 0; 42 $srcX = floor(($srcW - $srcH) / 2); 43 $srcW = $srcH; 44 } 45 $fdstH = $fdstW = $size; 46 } else { 47 if ($srcW < $size && $srcH < $size) { 48 return false; 49 } 50 if ($srcH >= $srcW) { 51 $fdstH = $size; 52 $fdstW = $fdstH * $srcW / $srcH; 53 } else { 54 $fdstW = $size; 55 $fdstH = $fdstW * $srcH / $srcW; 56 } 57 } 58 $ni = imagecreatetruecolor($fdstW, $fdstH); 59 //關閉 alpha 渲染並設置 alpha 標誌 60 imagealphablending($ni, false); 61 imagesavealpha($ni, true); 62 //重採樣拷貝部分圖像並調整大小 63 imagecopyresampled($ni, $im, 0, 0, $srcX, $srcY, $fdstW, $fdstH, $srcW, $srcH); 64 switch ($data[2]){ 65 case 1: 66 imagegif($ni,$dstFile); 67 break; 68 case 2: 69 imagejpeg($ni,$dstFile,$quality); 70 break; 71 case 3: 72 imagepng($ni,$dstFile); 73 break; 74 } 75 imagedestroy($im); 76 imagedestroy($ni); 77 } 78 return false; 79 } 80 81 } 82 //$obj = new CImage(); 83 //$res = $obj -> create_thumbnails('./old.jpg','./new.jpg'); 84 //if($res) echo '成功生成縮略圖'; 85 //else echo '生成縮略圖失敗';