php实现上传图片并进行压缩,之后覆盖原图片

取于互联网,还于互联网

之前在做个php上传图片的功能,并实现压缩,网上找了很多参考方案,最后集各家所成,编写成一个封装类,方便调用,现在跟大家分享下。

class test
{
    /*图片上传函数*/
    public function uploadImg($destination_folder,$input_file_name,$maxwidth,$maxheight) {

        /******************************************************************************      
        参数说明: 
        $destination_folder //图片存放路径 
        $input_file_name //文件上传input标签的name
        $maxwidth="640";//设置压缩后图片的最大宽度
        $maxheight="1136";//设置压缩图片的最大高度

        使用说明: 如果出错看看是不是下面的问题
        1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库; 
        2. 将extension_dir =改为你的php_gd2.dll所在目录; 
        ******************************************************************************/  

        //上传文件类型列表  
        $uptypes=array(  
            'image/jpg',  
            'image/jpeg',  
            'image/png',  
            'image/pjpeg',  
            'image/gif',  
            'image/bmp',  
            'image/x-png'  
        );        
        $max_file_size=8000000;     //上传文件大小限制, 单位BYTE  
        $image_name='';
        if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_FILES["$input_file_name"]['tmp_name']) )//已选择图片才执行下面
        {  
            if (!is_uploaded_file($_FILES["$input_file_name"]['tmp_name']))  
            //判断指定的文件是否是通过 HTTP POST 上传的 
            {  
                 echo "post出错,尝试修改服务器post文件大小限制,默认2M";  
                 exit;  
            }    
            $file = $_FILES["$input_file_name"];  
            if($max_file_size < $file["size"])  
            //检查文件大小  
            {  
                echo "文件太大!";  
                exit;  
            }     
            if(!in_array($file["type"], $uptypes))  
            //检查文件类型  
            {  
                echo "文件类型不符!".$file["type"];  
                exit;  
            }    
            if(!file_exists($destination_folder))  
            {  
                mkdir($destination_folder);  
            }    
            $filename=$file["tmp_name"];  
            $image_size = getimagesize($filename);  
            $pinfo=pathinfo($file["name"]);  
            $ftype=$pinfo['extension'];
            $current_time = time();
            $image_name=$current_time.".".$ftype;
            $destination = $destination_folder.$image_name;  
            if (file_exists($destination) && $overwrite != true)  
            {  
                echo "同名文件已经存在了";  
                exit;  
            }  

            if(!move_uploaded_file ($filename, $destination))  
            {  
                echo "移动文件出错";  
                exit;  
            }  

            //图片压缩并写回原位置替代原文件
            $route=$destination;//原图片路径
            $name=$destination_folder.$current_time;//压缩图片存放路径加名称,不带后缀
            $filetype=$ftype;//图片类型
            self::resizeImage($route,$maxwidth,$maxheight,$name,$filetype);//调用函数
            return $image_name;
        }
        return false;  
    }


    /*图片压缩函数
    $route;//原图片的存放路径
    $maxwidth="640";//设置图片的最大宽度
    $maxheight="1136";//设置图片的最大高度
    $name=$destination_folder.$current_time;//压缩图片存放路径加名称,不带后缀
    $filetype="jpg";//图片类型
    */
    public function resizeImage($route,$maxwidth,$maxheight,$name,$filetype)
    {
        $im = '';
        if( !strcasecmp($filetype,"jpg") || !strcasecmp($filetype,"jpeg") ){
            $im=imagecreatefromjpeg("$route");//参数是原图片的存放路径
        }
        else if( !strcasecmp($filetype,"png")  ){
            $im=imagecreatefrompng("$route");//参数是原图片的存放路径
        }
        else if( !strcasecmp($filetype,"gif")  ){
            $im=imagecreatefromgif("$route");//参数是原图片的存放路径
        }

        $pic_width = imagesx($im);
        $pic_height = imagesy($im);
        if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)){
            if($maxwidth && $pic_width>$maxwidth){
                $widthratio = $maxwidth/$pic_width;
                $resizewidth_tag = true;
            }
            if($maxheight && $pic_height>$maxheight){
                $heightratio = $maxheight/$pic_height;
                $resizeheight_tag = true;
            }  
            if($resizewidth_tag && $resizeheight_tag){
                if($widthratio<$heightratio)
                    $ratio = $widthratio;
                else
                    $ratio = $heightratio;
            }
            if($resizewidth_tag && !$resizeheight_tag)
                $ratio = $widthratio;
            if($resizeheight_tag && !$resizewidth_tag)
                $ratio = $heightratio;
            $newwidth = $pic_width * $ratio;
            $newheight = $pic_height * $ratio;

            if(function_exists("imagecopyresampled")){
                $newim = imagecreatetruecolor($newwidth,$newheight);//PHP系统函数
                imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);//PHP系统函数
            }
            else{
                $newim = imagecreate($newwidth,$newheight);
                imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
            }
            $name = $name.".".$filetype;
            if( !strcasecmp($filetype,"jpg") || !strcasecmp($filetype,"jpeg") ){
                imagejpeg($newim,$name);
            }
            else if( !strcasecmp($filetype,"png")  ){
                imagepng($newim,$name);
            }
            // else if( !strcasecmp($filetype,"gif")  ){   //不处理GIF文件因为压缩后就不会动了,开注释可处理
            //  imagegif($newim,$name);
            // } 
            imagedestroy($newim);
        }
        else{   //原图小于设定的最大长度和宽度,则不进行压缩,原图输出
            $name = $name.".".$filetype;
            if( !strcasecmp($filetype,"jpg") && !strcasecmp($filetype,"jpeg") ){
                imagejpeg($im,$name);
            }
            else if( !strcasecmp($filetype,"png")  ){
                imagepng($im,$name);
            }
            // else if( !strcasecmp($filetype,"gif")  ){   //不处理GIF文件因为压缩后就不会动了,开注释可处理
            //  imagegif($im,$name);
            // } 
        }
    }
}

示例调用方法:

<input type='file' name='upfile' id='photo'>";
$destination_folder="avatar_img/"; //图片存放路径   
$input_file_name = "upfile";
$maxwidth = 200;
$maxheight = 200;
$obj = new test();
$upload_result = $obj->uploadImg($destination_folder,$input_file_name,$maxwidth,$maxheight);
//$upload_result:有图片上传且上传成功返回图片名,否则返回false
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值