<?php/* * @author : xiaojiang * @time : 2013-04-25 *///定義縮圖片尺寸$picSize = array( '100_100'=> 1, '200_100'=> 1 );$imagePath = "../image/";function parseUrl($url){ preg_match("/(?P<name>[\w\d]+)_w(?P<width>\d+)_h(?P<height>\d+)\.(?P<ext>\w+)/",$url,$match); return $match;}$urlArr = explode("/",$_SERVER['REQUEST_URI']);$imgName = $urlArr[count($urlArr)-1];$picInfo = parseUrl($imgName);//錯誤尺寸if(empty($picInfo['width']) || empty($picInfo['height']) ||!array_key_exists($picInfo['width'].'_'.$picInfo['height'],$picSize)) die('不存在該尺寸圖片');$originalPic = $imagePath.$picInfo['name'].'/'.$picInfo['name'].'.'.$picInfo['ext'];//原始圖不存在if(!file_exists($originalPic)) die("圖片不存在!");/** *等比例壓縮圖片 */switch($picInfo['ext']){ case 'jpg': $orgImg = ImageCreateFromJpeg($originalPic); break; default: break;}$owidth = ImageSX($orgImg); //原始大小$oheight = ImageSY($orgImg);$tW = $picInfo['width'];$tH = $picInfo['height'];//擷取縮圖尺寸if($owidth/$oheight > $tW/$tH){ $tH = intval($tW * $oheight/$owidth);}else{ $tW = intval($tH * $owidth/$oheight);}//產生背景圖$new_img = ImageCreateTrueColor($picInfo['width'], $picInfo['height']);$bgColor = imagecolorallocate($new_img,255,255,255);if (!@imagefilledrectangle($new_img, 0, 0, $picInfo['width']-1, $picInfo['height']-1, $bgColor)) { echo "無法建立背景圖"; //@todo記錄日誌 exit(0);}if (!@imagecopyresampled($new_img, $orgImg, ($picInfo['width']-$tW)/2, ($picInfo['height']-$tH)/2, 0, 0, $tW, $tH, $owidth, $oheight)) { echo "產生圖片失敗"; exit(0);}//產生圖片ob_start();imagejpeg($new_img);$_newImg = ob_get_contents();ob_end_clean();file_put_contents($imagePath.$picInfo['name']."/".$imgName, $_newImg);header("Content-type:image/jpeg; charset=utf-8");imagejpeg($new_img);?>
使用時候綁定apache conf 的 documentError 404 的handler 為此檔案。。