php - 有什么方法将上传的图片将图片大小变小而且不失真

查看:168
本文介绍了php - 有什么方法将上传的图片将图片大小变小而且不失真的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题,PHP有什么办法处理图片 变小 而不会很失真
可在上传前处理 或上传后处理
有朋友做过么 小白求解答 谢谢

解决方案

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

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

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

*形参列表: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;

}

这篇关于php - 有什么方法将上传的图片将图片大小变小而且不失真的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆