php 创建缩略图函数


 * 创建缩略图
 * @param String $filename 原图地址
 * @param String $path 新图保存路径
 * @param Int $width 新图缩放宽度
 * @param Int $height 新图缩放高度
 * @param bool $forceReset 强制改变 or 定位中心线按比例改变大小(默认后者)
 */
function ImageResize($filename, $path, $width, $height, $forceReset = false) {
    //获取原图信息
    $img_info = getimagesize($filename);
    $w = $img_info[0];//取得原始图片的宽
    $h = $img_info[1];//取得原始图片的高
    
    //生成缩略图名称
    $newImage = 'thumb_' . date('YmdHis') . rand(1000,9999);
    
    //根据原图类型加载原图
    switch($img_info[2]){
        case 1:
            $imgCreate = imagecreatefromgif($filename);
            $newImage = $newImage . '.gif';
            break;
        case 2:
            $imgCreate = imagecreatefromjpeg($filename);
            $newImage = $newImage . '.jpg';
            break;
        case 3:
            $imgCreate = imagecreatefrompng($filename);
            $newImage = $newImage . '.png';
            break;
        default:
            return false;
    }
    
    //创建缩略图画布
    $thumb = imagecreatetruecolor($width, $height);
    
    if($forceReset){
        //将原图按比例复制到缩略图上
        imagecopyresampled($thumb, $imgCreate, 0, 0, 0, 0, $width, $height, $w, $h);
    }else{
        $p = $width / $height;
        if($w > $h * $p){
            $s_x = ($w - $h * $p)/2;
            $s_y = 0;
            $w = $h * $p;
        }else if($w < $h * $p){
            $s_x = 0;
            $s_y = ($h - $w / $p)/2;
            $h = $w / $p;
        }else{
            $s_x = 0;
            $s_y = 0;
        }
        //缩放图片到新图上,并将多余部分裁剪掉
        imagecopyresampled($thumb, $imgCreate, 0, 0, $s_x, $s_y, $width, $height, $w, $h);
    }
    
    switch($img_info[2]){
        case 1:
            imagegif($thumb, $path.$newImage);
            break;
        case 2:
            imagejpeg($thumb, $path.$newImage);
            break;
        case 3:
            imagepng($thumb, $path.$newImage);
            break;
    }

    return $newImage;
}

转载于:https://my.oschina.net/zhaosheng/blog/840893

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值