天天看点

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