php图片压缩

来源:互联网 发布:电吉他入门 知乎 编辑:程序博客网 时间:2024/06/02 12:31
//根据类型判断函数
    function create($src){     
        $info=getimagesize($src);     
        switch ($info[2]){     
            case 1: $im=imagecreatefromgif($src); break;     
            case 2: $im=imagecreatefromjpeg($src); break;     
            case 3: $im=imagecreatefrompng($src); break;     
        }     
        return $im;     
    }
    $src = resize('123.jpg','100','50');
    echo "<img src='$src' />";
    //判断缩放比例---创建新图片
    function resize($src,$w,$h){     
        $temp=pathinfo($src);     
        $name=$temp["basename"];//文件名     
        $dir=$temp["dirname"];//文件所在的文件夹     
        $extension=$temp["extension"];//文件扩展名     
        $savepath="{$dir}/{$name}";//缩略图保存路径,新的文件名为*.thumb.jpg          
        $info=getimagesize($src);//获取图片的基本信息
        $width=$info[0];//获取图片宽度     
        $height=$info[1];//获取图片高度     
        $per1=round($width/$height,2);//计算原图长宽比     
        $per2=round($w/$h,2);//计算缩略图长宽比     
        if($per1>$per2||$per1==$per2){  //计算缩放比例
            $per=$w/$width;     //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先
        }if($per1<$per2){     //原图长宽比小于缩略图长宽比,则按照高度优先
            $per=$h/$height;     
        }     
        $temp_w=intval($width*$per);//计算原图缩放后的宽度     
        $temp_h=intval($height*$per);//计算原图缩放后的高度     
        $temp_img=imagecreatetruecolor($temp_w,$temp_h);//创建画布     
        $im=create($src);     
        imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);     
        if($per1>$per2){     
            imagejpeg($temp_img,$savepath, 100);     
            imagedestroy($im);     
            return addBg($savepath,$w,$h,"w");   //宽度优先,在缩放之后高度不足的情况下补上背景
        }if($per1==$per2){     
            imagejpeg($temp_img,$savepath, 100);     
            imagedestroy($im);     
            return $savepath;   //等比缩放      
        }if($per1<$per2){     
            imagejpeg($temp_img,$savepath, 100);     
            imagedestroy($im);     
            return addBg($savepath,$w,$h,"h");  //高度优先,在缩放之后宽度不足的情况下补上背景           
        }     
    }
    //添加背景
    function addBg($src,$w,$h,$fisrt="w"){     
        $bg=imagecreatetruecolor($w,$h);     
        $white = imagecolorallocate($bg,255,255,255);     
        imagefill($bg,0,0,$white);//填充背景     
        $info=getimagesize($src);  //获取目标图片信息   
        $width=$info[0];//目标图片宽度     
        $height=$info[1];//目标图片高度     
        $img=create($src);     
        if($fisrt=="wh"){  //等比缩放   
            return $src;     
        }else{     
            if($fisrt=="w"){     
                $x=0;     
                $y=($h-$height)/2;//垂直居中     
            }     
            if($fisrt=="h"){     
                $x=($w-$width)/2;//水平居中     
                $y=0;     
            }     
            imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100);     
            imagejpeg($bg,$src,100);     
            imagedestroy($bg);     
            imagedestroy($img);     
            return $src;     
        }
    }
0 0
原创粉丝点击