PHP上传图片并缩放

PHP上传文件,文件的相关信息保存在$FILES这个全局变量里,文件本身保存在php.ini指定的临时文件夹下。
对图片缩放,有两个好处,一个是安全性问题能够满足,第二个能够将不必要使用大图的地方节省服务器的流量。
主要是用几个函数配合使用,按照这样的流程:
imagecreatetruecolor直接在内存中创建一张图片
imagecreatefromjpeg从上传的图片创建一张图片
imagecopyresampled复制图片
imagejpeg将内存中的图片保存到文件
imagedestroy销毁内存中的图片

在php中创建图像的函数是返回一种资源类型,可以理解为指向当前图像的指针,因此在最后不要忘记释放这个指针。(虽然PHP脚本的生存周期很短,结束后会自动释放。)
imagecopyresampledimagecopyresized好的地方在于不是非常粗糙,缩放效果更好一点。

    /**
     * 从表单上传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'];
        }
    }

你可能感兴趣的:(PHP)