PHP上传图片并缩放

来源:互联网 发布:sql去重 编辑:程序博客网 时间:2024/06/05 09:20

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