PHP 将上传的图片将图片大小变小而且不失真 阿星小栈

等比例缩放就好了 上传成功后,可以使用php原生的GD库(扩者框架里写好的方法)

GD库方法:
这里是以前写的封装成的函数

主要逻辑在 : 计算缩放后的图片尺寸

*形参列表:picname:图片文件名称

    • maxWidth 图片被缩放后的最大宽度

    • maxHeight 图片被缩放后的最大高度

    • pre 缩放后的图片名前缀,默认为"s_" 根据需要改
      *返回值:布尔值表示成功与否。

 

function imageResize($picname,$path,$maxWidth,$maxHeight,$pre="s_"){

      $path = rtrim($path,"/")."/";
        //1获取被缩放的图片信息
        $info = getimagesize($path.$picname);
        //获取图片的宽和高
        $width = $info[0];
        $height = $info[1];

        //2根据图片类型,使用对应的函数创建画布源。
        switch($info[2]){
            case 1: //gif格式
            $srcim = imagecreatefromgif($path.$picname);
            break;
        case 2: //jpeg格式
            $srcim = imagecreatefromjpeg($path.$picname);
            break;
        case 3: //png格式
            $srcim = imagecreatefrompng($path.$picname);
            break;
           default:
            return false;
            //die("无效的图片格式");
            break;
        }
        //3. 计算缩放后的图片尺寸
        if($maxWidth/$width<$maxHeight/$height){
            $w = $maxWidth;
            $h = ($maxWidth/$width)*$height;
        }else{
            $w = ($maxHeight/$height)*$width;
            $h = $maxHeight;
        }
        //4. 创建目标画布
        $dstim = imagecreatetruecolor($w,$h); 

        //5. 开始绘画(进行图片缩放)
        imagecopyresampled($dstim,$srcim,0,0,0,0,$w,$h,$width,$height);

        //6. 输出图像另存为
        switch($info[2]){
            case 1: //gif格式
                imagegif($dstim,$path.$pre.$picname);
                break;
            case 2: //jpeg格式
                imagejpeg($dstim,$path.$pre.$picname);
                break;
            case 3: //png格式
                imagepng($dstim,$path.$pre.$picname);
                break;
        }

        //7. 释放资源
        imagedestroy($dstim);
        imagedestroy($srcim);
        return true;
}                    

 

援引:https://segmentfault.com/q/1010000008921318

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值