主要說明下幾個用到的函數:
imagecreatefromjpeg() 返回一映像標識符,代表了從給定的檔案名稱取得的映像。
int imagesx ( resource image) 返回 image 所代表的映像的寬度。
int imagesy ( resource image) 返回 image 所代表的映像的高度。
bool function_exists ( string function_name) 定義指定的函數則返回 true 值,其它情形均返回 false 值。
imagecreatetruecolor() 返回一個映像標識符,代表了一幅大小為 x_size 和 y_size 的黑色映像。
imagecreate() 返回一個映像標識符,代表了一幅大小為 x_size 和 y_size 的空白映像。
int imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresized 與上面方法相同,區別見下面說明:
與上面的參數相同
int srcW, int srcH) 重採樣拷貝部分映像並調整大小
$dst_image:建立的圖片
$src_image:需要載入的圖片
$dst_x:設定需要載入的圖片在新圖中的x座標
$dst_y:設定需要載入的圖片在新圖中的y座標
$src_x:設定載入圖片要載入的地區x座標
$src_y:設定載入圖片要載入的地區y座標
$dst_w:設定載入的原圖的寬度(在此設定縮放)
$dst_h:設定載入的原圖的高度(在此設定縮放)
$src_w:原圖要載入的寬度
$src_h:原圖要載入的高度
ImageCopyResized()函數在所有GD版本中有效,但其縮放映像的演算法比較粗糙。ImageCopyResamples(),其像素插值演算法得到的映像邊緣比較平滑,但該函數的速度比ImageCopyResized()慢。
imagejpeg() 從 image 映像以 filename 為檔案名稱建立一個 JPEG 映像。
imagedestroy() 釋放與 image 關聯的記憶體。
執行個體:
<?php header("Content-Type:text/html;charset=utf-8"); $im = imagecreatefromjpeg('oldsrc.jpg'); $maxwidth = 75; $maxheight = 75; $name = 'newpic'; $filetype = '.jpg'; $pic_width = imagesx($im); $pic_height = imagesy($im); if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) { if($maxwidth && $pic_width>$maxwidth) //原圖寬度大於最大寬度 { $widthratio = $maxwidth/$pic_width; $resizewidth_tag = true; } if($maxheight && $pic_height>$maxheight) //原圖高度度大於最大高度 { $heightratio = $maxheight/$pic_height; $resizeheight_tag = true; } if($resizewidth_tag && $resizeheight_tag) //如果新圖片的寬度和高度都比原圖小 { if($widthratio<$heightratio) //那個比較小就說明它的長度要長,就取哪條,以長邊為準縮放保證圖片不被壓縮 $ratio = $widthratio; else $ratio = $heightratio; } if($resizewidth_tag && !$resizeheight_tag) $ratio = $widthratio; if($resizeheight_tag && !$resizewidth_tag) $ratio = $heightratio; $newwidth = $pic_width * $ratio; //原圖的寬度*要縮放的比例 $newheight = $pic_height * $ratio; //原圖高度*要縮放的比例 if(function_exists("imagecopyresampled")) { $newim = imagecreatetruecolor($newwidth,$newheight); //產生一張要產生的黑色背景圖 ,比例為計算出來的新圖片比例 imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); //複製按比例縮放的原圖到 ,新的黑色背景中。 } else { $newim = imagecreate($newwidth,$newheight); imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); } $name = $name.$filetype; imagejpeg($newim,$name); imagedestroy($newim); } else { $name = $name.$filetype; imagejpeg($im,$name); } ?>
特別說明:
GD庫1.6.2版以前支援GIF格式,但因GIF格式使用LZW演算法牽涉專利權,因此在GD1.6.2版之後不支援GIF的格式。如果你是WINDOWS的環境,你只要進入PHP.INI檔案找到extension=php_gd2.dll,將#去除,重啟APACHE即可,如果你是Linux環境,又想支援GIF,PNG,JPEG,你需要去下載libpng,zlib,以及freetype字型並安裝。
OK,PHP圖片壓縮函數完成,最後我們概述一下整個處理的思路:
通過計算實際圖片的長寬與規定產生圖片的長寬之間的縮放比例,根據實際的需求(按照寬度還是按照高度進行圖片縮放)計算出最終產生圖片的大小,然後應用PHP圖片處理函數對圖片進行處理,最後輸出圖片。