getimagesize函數可以解析上傳圖片的所有參數,包含圖片高度,寬度,類型等,有了這些資訊,就能在上傳檔案時做進一步的判斷分流,使用方法如下:
$arrayimg = getimagesize($file['tmp_name']); //取得上傳暫存路徑中檔案資訊
$arrayimg共會返回以下陣列
Array(
[0] => 350
[1] => 318
[2] => 2
[3] => width="350" height="318"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
$arrayimg[0]=>圖像寬度的像素值
$arrayimg[1]=>圖像高度的像素值
$arrayimg[2]=>圖像的類型1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
$arrayimg[3]=>寬度和高度的字符串,可以直接用於HTML 的<image> 標籤
$arrayimg[bits]=>圖像的每種顏色的位數,二進制格式
$arrayimg[channels]=>圖像的通道值,RGB 圖像默認是 3
$arrayimg[mime]=>圖像的MIME資訊,可以用來在HTTP Content-type 頭信息中發送正確的信息,如:header("Content-type: image/jpeg");
應用範例1-設定上傳圖片最大寬度->超過才做縮圖
假設上傳圖片最大寬度為1000px,若上傳圖檔超過最大寬度才做縮圖處理,否則原尺寸上傳
$arrayimg = getimagesize($file['tmp_name']);
$imgwmax='1000'; //上傳圖片最大寬度
//上傳圖片寬度大於預設寬度才做縮圖
if($arrayimg[0] > $imgwmax){
$handle->file_overwrite = true;
$handle->image_resize = true;
//進行縮圖處理
$handle->image_x = $imgwmax;
$handle->image_ratio_y = true;
}
這樣只有上傳超過1000px的圖檔才會被縮圖到1000px
應用範例2-設定上傳檔案類型必須為圖檔,且上傳圖片最大寬度超過預設值才做縮圖
$arrayimg = getimagesize($file['tmp_name']);
$imgwmax='1000'; //圖片最大寬度
//必須是圖檔類型且原始圖寬度超過預設寬度->才做縮圖
if(!empty($arrayimg[2]) && $arrayimg[0] > $imgwmax){
$handle->file_overwrite = true;
$handle->image_resize = true;
//進行縮圖處理
$handle->image_x = $imgwmax;
$handle->image_ratio_y = true;
}
這樣如果是多檔上傳,其中有圖檔及不是圖檔的檔案,就能分流處理,只針對圖檔類型且超過預設寬度的圖片才做縮圖,減少GD圖形庫效能消耗
以上工作心的撰寫,有需要的朋友參考看看!
工作心得撰寫 徐嘉裕 Neil hsu
留言
張貼留言