PHP:上传图片的图片压缩

上传图片

php 复制代码
//调用方法
//上传公共文件-图片(基础信息)
function public_upload() {
    $file = $_FILES['file']; // 获取小程序传来的图片
    if (is_uploaded_file($_FILES['file']['tmp_name'])) {
        // 把文件转存到你希望的目录(不要使用copy函数)
        $uploaded_file = $_FILES['file']['tmp_name'];
        // 获取当前日期
        $current_date = date("Ymd");
        // 动态的创建一个文件夹
        $user_path = $_SERVER['DOCUMENT_ROOT'] . "/SO/baseinfo/{$current_date}/";
        // 判断该用户文件夹是否已经有这个文件夹
        if (!file_exists($user_path)) {
            mkdir($user_path, 0777, true);
        }
        // 获取文件名
        $file_true_name = $_FILES['file']['name'];
        // 生成随机数
        $random_number = mt_rand(1000000000000000, 9999999999999999); // 随机生成16位数字
        // 新文件名
        $new_file_name = $current_date . '_' . $random_number . '.' . pathinfo($file_true_name, PATHINFO_EXTENSION);
        // 文件需要移动到的路径
        $move_to_file = $user_path . "/" . $new_file_name;
        // 调用压缩图片的方法
        if (compress_image($uploaded_file, $move_to_file)) {
            $data = [
                'code' => 0,
                'msg' => '上传成功',
                'info' => ['file_path' => "SO/baseinfo/{$current_date}/" . $new_file_name]
            ];
        } else {
            $data = ['code' => 1, 'msg' => '压缩或保存图片失败'];
        }
        // 移动上传的文件
        // if (move_uploaded_file($uploaded_file, $move_to_file)) {
        //     $data = [
        //         'code' => 0,
        //         'msg' => '上传成功',
        //         'info' => ['file_path' => "SO/baseinfo/{$current_date}/" . $new_file_name]
        //     ];
        // } else {
        //     $data = ['code' => 1, 'msg' => '上传失败'];
        // }
    } else {
        $data = ['code' => 1, 'msg' => '上传失败'];
    }
    echo json_encode($data, JSON_UNESCAPED_SLASHES);
}

压缩图片方法

php 复制代码
function compress_image($source_path, $destination_path, $quality = 60, $max_width = 800, $max_height = 800) {
    // 获取图像信息
    list($width, $height, $type) = getimagesize($source_path);
    
    // 创建图像资源
    switch ($type) {
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($source_path);
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($source_path);
            break;
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($source_path);
            break;
        default:
            return false; // 不支持的图片格式
    }

    // 调整图像分辨率
    if ($width > $max_width || $height > $max_height) {
        $ratio = min($max_width / $width, $max_height / $height);
        $new_width = $width * $ratio;
        $new_height = $height * $ratio;

        $resized_image = imagescale($image, $new_width, $new_height);
        imagedestroy($image); // 清除原始图像资源
        $image = $resized_image;
    }

    // 压缩并保存图片
    $success = false;
    switch ($type) {
        case IMAGETYPE_JPEG:
            $success = imagejpeg($image, $destination_path, $quality);
            break;
        case IMAGETYPE_PNG:
            // 对于PNG,我们一般不建议更改质量,因为它是一个无损格式
            $success = imagepng($image, $destination_path, 9);
            break;
        case IMAGETYPE_GIF:
            $success = imagegif($image, $destination_path);
            break;
    }

    // 清除内存中的图像资源
    imagedestroy($image);

    return $success;
}
相关推荐
一笑的小酒馆9 小时前
Androidiot开发之猫脸识别
android
djarmy10 小时前
MAIN.c(1): warning C318: can’t open file ‘STC8G.H’ 报错 解决 分析
c语言·开发语言·mongodb
HEJOO910 小时前
深入理解 Java volatile 关键字:原理、用法与常见误区
java·开发语言·spring
曹牧10 小时前
Java:no content to map due to end of input
java·开发语言
梦梦代码精10 小时前
《回收租赁系统技术选型避坑指南:业务闭环与二开自由度详解》
开发语言·低代码·docker·开源·代码规范
隔窗听雨眠10 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
David猪大卫11 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
charlie11451419111 小时前
现代Qt开发之图像处理进阶:像素操作与格式转换
开发语言·图像处理·qt
李永奉11 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑
三84411 小时前
PHP Session 反序列化(2):漏洞根因 —— 序列化处理器错位与对象注入
android·web安全·php·反序列化·session