You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改PHP代码实现批量压缩多张图片而非单张

多图片批量压缩处理修改方案

修改后的完整代码

HTML表单部分

<form method="post" action="" enctype="multipart/form-data">
    <div class="file-upload-wrapper">
        <input type="file" name="image" accept="image/*" multiple>
    </div>
    <!-- 可选:添加压缩级别自定义输入框 -->
    <input type="number" name="compression" min="0" max="100" value="60" placeholder="压缩级别(JPG:0-100,PNG:0-9)">
    <input type="submit" value="upload" name="submit">
</form>

PHP处理部分

<?php
if (isset($_POST['submit'])) {
    // 确保uploads目录存在,不存在则自动创建
    $directory_name = 'uploads/';
    if (!is_dir($directory_name)) {
        mkdir($directory_name, 0755, true);
    }

    // 遍历所有上传的文件
    $total_files = count($_FILES['image']['name']);
    for ($i = 0; $i < $total_files; $i++) {
        $image_name = $_FILES['image']['name'][$i];
        $tmp_name = $_FILES['image']['tmp_name'][$i];
        $error = $_FILES['image']['error'][$i];

        // 跳过上传出错的文件
        if ($error !== UPLOAD_ERR_OK) {
            continue;
        }

        // 移动原始文件到uploads目录
        $file_name = $directory_name . $image_name;
        if (move_uploaded_file($tmp_name, $file_name)) {
            // 生成压缩后的文件名
            $compress_file = "og_optimised--" . $image_name;
            $compressed_img = $directory_name . $compress_file;
            // 执行压缩
            compressImage($file_name, $compressed_img);
            // 删除原始文件
            unlink($file_name);
        }
    }
}

function compressImage($source_image, $compress_image) {
    $image_info = getimagesize($source_image);
    // 获取用户提交的压缩级别,做格式适配校验
    $compression_level = isset($_POST["compression"]) ? (int)$_POST["compression"] : null;

    if ($image_info['mime'] == 'image/jpeg') {
        $source = imagecreatefromjpeg($source_image);
        // JPG压缩级别限制在0-100,默认60
        $level = $compression_level !== null && $compression_level >=0 && $compression_level <=100 ? $compression_level : 60;
        imagejpeg($source, $compress_image, $level);
        imagedestroy($source); // 释放内存,避免批量处理时溢出
    } elseif ($image_info['mime'] == 'image/png') {
        $source = imagecreatefrompng($source_image);
        // PNG压缩级别限制在0-9,默认3
        $level = $compression_level !== null && $compression_level >=0 && $compression_level <=9 ? $compression_level : 3;
        imagepng($source, $compress_image, $level);
        imagedestroy($source); // 释放内存
    }
    return $compress_image;
}
?>

核心修改点

  • 多文件遍历逻辑:多文件上传时,$_FILES['image']的name、tmp_name等字段会变成数组,通过循环逐个处理每个文件。
  • 错误过滤:添加上传错误判断,跳过上传失败的文件,避免程序崩溃。
  • 目录保障:自动创建uploads目录,防止因目录不存在导致文件移动失败。
  • 内存优化:压缩后调用imagedestroy()释放GD库占用的内存,适配批量处理场景。
  • 压缩级别适配:根据图片格式对用户输入的压缩级别做范围校验,确保参数合法。
  • 表单修复:修正accept属性为标准的image/*,同时补充压缩级别输入框,让功能更灵活。

内容的提问来源于stack exchange,提问作者Owen Gaudion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:45:53