yii2.0上传图片的时候如何实现自动压缩?

简介: yii2.0上传图片的时候如何实现自动压缩?

在 Yii2.0 中,可以使用 PHP 的 GD 库来压缩图片。以下是一个实现自动压缩的示例:

// 获取上传的图片
$image = UploadedFile::getInstance($model, 'image');

// 如果有上传的图片
if ($image !== null) {
    // 获取图片信息
    $imageInfo = getimagesize($image->tempName);
    $imageWidth = $imageInfo[0];
    $imageHeight = $imageInfo[1];

    // 计算缩放比例
    $scale = min(
        Yii::$app->params['maxImageWidth'] / $imageWidth,
        Yii::$app->params['maxImageHeight'] / $imageHeight
    );

    // 计算缩放后的宽度和高度
    $newWidth = intval($imageWidth * $scale);
    $newHeight = intval($imageHeight * $scale);

    // 创建一个新的画布
    $newImage = imagecreatetruecolor($newWidth, $newHeight);

    // 根据图片类型创建一个原始图像
    switch ($imageInfo[2]) {
        case IMAGETYPE_GIF:
            $sourceImage = imagecreatefromgif($image->tempName);
            break;
        case IMAGETYPE_JPEG:
            $sourceImage = imagecreatefromjpeg($image->tempName);
            break;
        case IMAGETYPE_PNG:
            $sourceImage = imagecreatefrompng($image->tempName);
            break;
        default:
            throw new \Exception('Unsupported image type.');
    }

    // 缩放并复制原始图像到新的画布
    imagecopyresampled($newImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight);

    // 保存缩放后的图片
    switch ($imageInfo[2]) {
        case IMAGETYPE_GIF:
            imagegif($newImage, $image->tempName);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($newImage, $image->tempName);
            break;
        case IMAGETYPE_PNG:
            imagepng($newImage, $image->tempName);
            break;
        default:
            throw new \Exception('Unsupported image type.');
    }

    // 销毁画布
    imagedestroy($newImage);
}

在这个示例中,我们首先获取上传的图片,然后使用 getimagesize() 函数获取图片的宽度和高度。接着,我们计算缩放比例,创建一个新的画布,并根据图片类型创建一个原始图像。然后,我们使用 imagecopyresampled() 函数将原始图像缩放并复制到新的画布中。最后,我们使用适当的函数将缩放后的图片保存到原始文件中,并销毁画布。

请注意,这只是一个简单的示例,如果需要更高级的图片处理功能,可能需要使用更专业的图像处理库,如 ImageMagick 或 GD Library。

相关文章
|
10月前
|
JavaScript
JS 如何动态获取本地文件夹中的所有图片
JS 如何动态获取本地文件夹中的所有图片
623 0
|
8月前
|
存储 前端开发 C#
如何实现文件断点续传功能
相信大家都使用过迅雷、电驴、百度云网盘等一类的工具,所有这些支持上传或下载的工具都有一个功能,那就是断点续传,也就是在你网络不佳传输断开时,传输会暂停,在网络恢复后,可以继续传输,从而避免数据的重复上传,以减少网络流量,提高效率。那么,你有仔细想过这其中的实现原理嘛?
|
10月前
|
JSON 前端开发 JavaScript
layui上传文件弹出请求上传接口出现异常的终极解决方案(v2.68版本、ajax底层逻辑修改、debug快速定位)
layui上传文件弹出请求上传接口出现异常的终极解决方案(v2.68版本、ajax底层逻辑修改、debug快速定位)
576 0
|
10月前
|
JSON 前端开发 API
layui框架实战案例(8):web图片裁切插件croppers.js组件实现上传图片的自定义截取(含php后端)
layui框架实战案例(8):web图片裁切插件croppers.js组件实现上传图片的自定义截取(含php后端)
413 0
|
10月前
|
编解码 前端开发 JavaScript
layui框架实战案例(5):基于PHP后端的layUI上传视频到七牛云对象储存并自动转码
layui框架实战案例(5):基于PHP后端的layUI上传视频到七牛云对象储存并自动转码
205 0
|
12月前
|
存储 小程序
小程序图片上传,存储,获取,显示(含源码)
小程序图片上传,存储,获取,显示(含源码)
254 0
|
缓存 前端开发 JavaScript
如何优化Yii2视图文件的加载速度?具体步骤是怎样的?底层原理是什么?
如何优化Yii2视图文件的加载速度?具体步骤是怎样的?底层原理是什么?
108 0
|
SQL 前端开发 Java
扩展MP提供的方法、实现文件上传功能
MP接口方法扩展,文件上传功能实现
152 0
扩展MP提供的方法、实现文件上传功能
|
存储 缓存 安全
Yii2文件/图片上传实例
Yii2文件/图片上传实例
340 0
Yii2文件/图片上传实例
|
JavaScript 程序员 API
Nodejs实现图片的上传、压缩预览、定时删除。
我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番。