PHP上傳圖片並縮放
阿新 • • 發佈:2019-01-10
PHP上傳檔案,檔案的相關資訊儲存在$FILES
這個全域性變數裡,檔案本身儲存在php.ini
指定的臨時資料夾下。
對圖片縮放,有兩個好處,一個是安全性問題能夠滿足,第二個能夠將不必要使用大圖的地方節省伺服器的流量。
主要是用幾個函式配合使用,按照這樣的流程:
imagecreatetruecolor
直接在記憶體中建立一張圖片
imagecreatefromjpeg
從上傳的圖片建立一張圖片
imagecopyresampled
複製圖片
imagejpeg
將記憶體中的圖片儲存到檔案
imagedestroy
銷燬記憶體中的圖片
在php中建立影象的函式是返回一種資源型別,可以理解為指向當前影象的指標,因此在最後不要忘記釋放這個指標。(雖然PHP指令碼的生存週期很短,結束後會自動釋放。)
imagecopyresampled
imagecopyresized
好的地方在於不是非常粗糙,縮放效果更好一點。
/**
* 從表單上傳JPEG檔案並進行重新縮放
* @param string $fieldname
* @param string $desturl
* @param string $errmsg
* @param int $width
* @param int $height
* @return int
*/
function uploadjpeg($fieldname, $desturl, &$errmsg , $width = 100, $height = 100) {
if($_FILES[$fieldname]['error'] == 0){
$imageinfo = getimagesize($_FILES[$fieldname]['tmp_name']);
if($imageinfo && $imageinfo['mime'] == 'image/jpeg' && $imageinfo[0] < 1000 && $imageinfo[1] < 1000){
$newfile = imagecreatetruecolor($width, $height);
$srcfile = imagecreatefromjpeg($_FILES[$fieldname]['tmp_name']);
if($newfile && $srcfile){
imagecopyresampled($newfile, $srcfile, 0, 0, 0, 0, $width, $height, $imageinfo[0], $imageinfo[1]);
if(imagejpeg($newfile, $desturl, 100)){
imagedestroy($newfile);
imagedestroy($srcfile);
return 0;
}
$errmsg .= '伺服器錯誤.';
return -1;
}else{
$errmsg .= '不正確的檔案型別.';
return -2;
}
}else{
$errmsg .= '不正確的檔案型別;或者圖片大小過大.';
return -1;
}
}else {
return $_FILES[$fieldname]['error'];
}
}