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 = , $height = ) {
if($_FILES[$fieldname]['error'] == ){
$imageinfo = getimagesize($_FILES[$fieldname]['tmp_name']);
if($imageinfo && $imageinfo['mime'] == 'image/jpeg' && $imageinfo[] < && $imageinfo[] < ){
$newfile = imagecreatetruecolor($width, $height);
$srcfile = imagecreatefromjpeg($_FILES[$fieldname]['tmp_name']);
if($newfile && $srcfile){
imagecopyresampled($newfile, $srcfile, , , , , $width, $height, $imageinfo[], $imageinfo[]);
if(imagejpeg($newfile, $desturl, )){
imagedestroy($newfile);
imagedestroy($srcfile);
return ;
}
$errmsg .= '伺服器錯誤.';
return -;
}else{
$errmsg .= '不正确的檔案類型.';
return -;
}
}else{
$errmsg .= '不正确的檔案類型;或者圖檔大小過大.';
return -;
}
}else {
return $_FILES[$fieldname]['error'];
}
}