1. 程式人生 > >PHP上傳圖片並縮放

PHP上傳圖片並縮放

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']; } }