文章出處
文章列表
首先上封裝的函數代碼:
function thumb($filename,$destination=null,$dst_w=null,$dst_h=null,$isReservedSource=true,$scale=0.5){ list($src_w,$src_h,$imagetype)=getimagesize($filename); //得到原始圖像的長寬 if(is_null($dst_w)||is_null($dst_h)){ $dst_w=ceil($src_w*$scale); $dst_h=ceil($src_h*$scale); } $mime=image_type_to_mime_type($imagetype); //echo $mime 會輸出image/jpg $createFun=str_replace("/", "createfrom", $mime); //$createFun使得image/jpg轉換為imagecreatefromjpg來生成圖像,這樣就可以使用$mime得到圖片的類型(如jpg,png)等 //不用每次都設定函數為imagecreatefromjpg,imagecreatefrompng等 $outFun=str_replace("/", null, $mime); $src_image=$createFun($filename); $dst_image=imagecreatetruecolor($dst_w, $dst_h); imagecopyresampled($dst_image, $src_image, 0,0,0,0, $dst_w, $dst_h, $src_w, $src_h); if($destination&&!file_exists(dirname($destination))){ mkdir(dirname($destination),0777,true); } $dstFilename=$destination==null?getUniName().".".getExt($filename):$destination; $outFun($dst_image,$dstFilename); imagedestroy($src_image); imagedestroy($dst_image); if(!$isReservedSource){ unlink($filename); } return $dstFilename; }
該函數保存在 ../lib/image.func.php中
有因為getUniName()函數和getExt()函數在 ../lib/string.func.php中,所以
調用函數為:
require_once '../lib/string.func.php'; require_once '../lib/image.func.php'; $filename="des_big.jpg"; //thumb($filename); thumb($filename,"image_50/".$filename,50,50,true); //調用../lib/image.func.php函數 thumb($filename,"image_220/".$filename,220,220,true); thumb($filename,"image_350/".$filename,350,350,true); thumb($filename,"image_800/".$filename,800,800,true);
輸出結果是會在image_50,image_220,image_350,image_800的文件夾內分別產生50*50,220*220,350*350,800*800的圖片(以des_big.jpg為原型產生的)
/** * 生成唯一字符串 * @return string */ function getUniName() { return md5(uniqid(microtime(ture),(ture))); //這里得到一個可以變化的字母家數字,為了使上傳的文件即使相同,傳到服務器上也不相同 ;我覺得用date(y.m.d).time()這樣更好,又能得到時間,后面的time()時間戳還能變化 } /** * 得到文件的擴展名 * @param string $filename * @return string */ function getExt($filename){ return strtolower(end(explode(".",$filename))); }
以下介紹在函數中用到的函數:
imagecreatetruecolor — 新建一個真彩色圖像 說明 resource imagecreatetruecolor ( int $width , int $height )
imagecopyresampled — 重采樣拷貝部分圖像并調整大小 說明 bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) imagecopyresampled() 將一幅圖像中的一塊正方形區域拷貝到另一個圖像中,平滑地插入像素值,因此,尤其是,減小了圖像的大小而仍然保持了極大的清晰度。
file_exists() 函數檢查文件或目錄是否存在。 如果指定的文件或目錄存在則返回 true,否則返回 false。 語法 file_exists(path)
imagedestroy — 銷毀一圖像 說明 bool imagedestroy ( resource $image ) imagedestroy() 釋放與 image 關聯的內存。image 是由圖像創建函數返回的圖像標識符,
image_type_to_mime_type — 取得 getimagesize,exif_read_data,exif_thumbnail,exif_imagetype 所返回的圖像類型的 MIME 類型
MIME類型有如jpeg,png之類的
imagecreatefromjpeg — 由文件或 URL 創建一個新圖象。 說明 resource imagecreatefromjpeg ( string $filename ) imagecreatefromjpeg() 返回一圖像標識符,代表了從給定的文件名取得的圖像。
文章列表
全站熱搜
留言列表