PHP上传图片进行等比缩放

14 篇文章 0 订阅
5 篇文章 0 订阅

本文为原创文章,更多了解其他同类文章,可以访问:http://www.icode100.com

啥也不说,直接上代码,大家可以自行添加增加水印功能:

<?php
/**
 * 
 * @author zhao jinhan
 * @date 2014年1月13日11:54:30
 * @email xb_zjh@126.com  
 * 
 */
header('Content-type:text/html; charset=utf-8');
//定义缩略图的宽高
define('THUMB_WIDTH',300);
define('THUMB_HEIGHT',300);

/**
 * 重新生成上传的文件名
 * @return string
 * @author zhao jinhan
 *
 */
function _file_type($filetype = null){
    switch($filetype)
    {
        case "image/jpeg":
            $fileextname  = "jpg";
            break;
        case "image/gif":
            $fileextname  = "gif";
            break;
        case "image/png":
            $fileextname  =  "png";
            break;
        default:
            $fileextname = false;
            break;
    }
    return $fileextname?date('YmdHis',time()).'.'.$fileextname:false;
}

/**
 * 
 * @param string $filename
 * @param string $width
 * @param string $height
 * @param string $quality
 * @param string $savepath
 * @return boolean
 */
function _make_thumb($filename='', $width=THUMB_WIDTH, $height=THUMB_HEIGHT, $savepath='./upload'){
    if(file_exists($filename)){
        //上传图片的尺寸
        $imagesize=getimagesize($filename);    
        $imagewidth=$imagesize[0];
        $imageheight=$imagesize[1];
        $mime = $imagesize['mime'];
        //宽高比例
        $ratio = $imagewidth/$imageheight; 
        
        //新建一个背景图片
        $bgimg = imagecreatetruecolor($width, $height);
        $white = imagecolorallocate($bgimg, 255, 255, 255);
        //填充背景色为白色
        imagefill($bgimg,0,0,$white);
        if($mime == 'image/gif'){
            $im = @imagecreatefromgif($filename); /* Attempt to open */
            $outfun = 'imagegif';
        }elseif($mime == 'image/png'){
            $im = @imagecreatefrompng($filename); /* Attempt to open */
            $outfun = 'imagepng';
        }else{
            $im = @imagecreatefromjpeg($filename); /* Attempt to open */
            $outfun = 'imagejpeg';
        }
        
        if($ratio > 1){
            //宽度较大            
            if($imagewidth > $width){
                //缩放图片到背景图片上                
                $new_width = $width;
                $new_height = ($width*$imageheight)/$imagewidth; 
                $bg_y = ceil(abs(($height-$new_height)/2));
                imagecopyresampled($bgimg, $im, 0, $bg_y, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
            }else{    
                //复制图片到背景图片上    
                $copy = true;                
            }
        }else{
            //高度较大
            if($imageheight > $height){
                //缩放图片
                $new_height = $height;
                $new_width = ($height*$imagewidth)/$imageheight;
                $bg_x = ceil(($width-$new_width)/2);
                imagecopyresampled($bgimg, $im, $bg_x, 0, 0, 0, $new_width, $new_height, $imagewidth, $imageheight);
            }else{
                //复制图片到背景图片上    
                $copy = true;        
            }
        }
        if($copy){
            //复制图片到背景图片上    
            $bg_x = ceil(($width-$imagewidth)/2);
            $bg_y = ceil(($height-$imageheight)/2);
            imagecopy($bgimg, $im, $bg_x, $bg_y, 0, 0, $imagewidth, $imageheight);
        }
        $ext = _file_type($mime);        
        $outfun($bgimg, $savepath.'/'.$ext);
        imagedestroy($bgimg);
        return $savepath.'/'.$ext;
    }else{        
        return false;
    }
}

if($_POST){    
    $size = $_POST['size']?strtoupper(trim($_POST['size'])):'2M';
    $imgsize = $_FILES['img']['size']?$_FILES['img']['size']/(1024*1024):0;
    $imgwidth = $imgheight = $_POST['width-height']?intval($_POST['width-height']):300;
    //自定定义文件上传大小
    ini_set('upload_max_filesize',$size);    
    $mathsize = str_replace('M','',$size);        
    if($imgsize>$mathsize){
        echo "图片大小不得超过{$size}!";
        return;
    }
    if($file_name = _file_type($_FILES['img']['type'])){        
        if($_FILES['img']['error'] == UPLOAD_ERR_OK){            
            $savepath = 'upload/';
            if(!is_dir($savepath)){
                mkdir($savepath,0644);
            }            
            //生成缩略图
            $thumb_file = _make_thumb($_FILES['img']['tmp_name'], $imgwidth, $imgheight, $savepath);
            //move_uploaded_file($_FILES['img']['tmp_name'],$savepath.$file_name);
            echo "生成后的图片为:<img src='".$thumb_file."' />";
        }else{
            echo $_FILES['img']['error'];
            return;
        }
    }else{
        echo "图片格式不正确,请上传jpg,gif,png的格式!";
        return;
    }
    
    
    
}else{
    echo <<<EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>缩放图片保存成正方形</title>
</head>
<body>
        <form action="" method="POST" enctype="multipart/form-data">
            <div>
                <label>上传一张图片:</label>
                <input type="file" name="img" />
            </div>
            <div>
                <label>生成缩略图的宽高(单位px):</label>
                <input type="text" name="width-height" value="300" />
            </div>        
            <div>
                <label>文件大小上限:</label>
                <input type="text" name="size" value="2M" />
            </div>    
            <div><input type="submit" name="submit" value="提交" /></div>
        </form>
</body>
</html>
EOT;
}

摘自: http://www.icode100.com/posts/view/64

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值