天天看點

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