栏目树
用PHP实现图片批量压缩

以下是使用 PHP 实现图片批量压缩的示例代码,这里借助了GD库来进行图片处理。示例代码假设要处理的图片都在同一个文件夹下(可根据实际需求调整路径等),并且是常见的图片格式(如jpg、png等),代码主要思路是遍历指定文件夹下的图片文件,然后逐个进行压缩处理。

<?php
// 定义图片所在文件夹路径
$imageFolder = 'your_image_folder_path';
// 定义压缩后图片保存的文件夹路径,可按需修改,需确保该文件夹有写入权限
$compressedFolder = 'compressed_images_folder_path';
// 压缩质量(取值范围0 - 100,数值越小质量越低、文件越小),可按需调整
$quality = 80;

// 检查指定的图片文件夹是否存在
if (!is_dir($imageFolder)) {
    die("图片文件夹不存在");
}

// 检查压缩后图片保存的文件夹是否存在,不存在则创建
if (!is_dir($compressedFolder)) {
    mkdir($compressedFolder, 0777, true);
}

// 获取图片文件夹下所有文件
$files = scandir($imageFolder);

foreach ($files as $file) {
    // 跳过. 和.. 这两个特殊目录项
    if ($file === '.' || $file === '..') {
        continue;
    }

    $imagePath = $imageFolder. '/'. $file;
    $info = getimagesize($imagePath);
    if ($info === false) {
        continue; // 如果不是有效的图片文件则跳过
    }

    // 根据图片类型创建对应的图像资源
    switch ($info[2]) {
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($imagePath);
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($imagePath);
            break;
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($imagePath);
            break;
        default:
            continue; // 不支持的图片类型则跳过
    }

    // 获取图片原始宽度和高度
    $width = imagesx($image);
    $height = imagesy($image);

    // 构建压缩后图片保存的路径
    $compressedPath = $compressedFolder. '/'. $file;

    // 进行图片压缩并保存(这里以JPEG格式保存为例,若原先是PNG等可按需调整保存格式及相关参数)
    switch ($info[2]) {
        case IMAGETYPE_JPEG:
            imagejpeg($image, $compressedPath, $quality);
            break;
        case IMAGETYPE_PNG:
            imagepng($image, $compressedPath, 9); // 对于PNG可调整压缩级别(0 - 9),这里示例用9
            break;
        case IMAGETYPE_GIF:
            imagegif($image, $compressedPath);
            break;
    }

    // 释放图像资源
    imagedestroy($image);
}

echo "图片批量压缩完成";
?>
上述代码的具体步骤如下:

  1. 定义相关路径和压缩质量参数
    • 首先指定了原始图片所在文件夹的路径($imageFolder)以及压缩后图片要保存的文件夹路径($compressedFolder),要确保这两个路径符合实际情况并且有相应的操作权限(比如保存路径要有写入权限)。
    • 同时定义了压缩质量($quality),取值范围是 0 到 100,数值越小生成的压缩后图片文件越小,但图片质量也会越低,可根据实际需求来调整该数值。
  2. 检查文件夹情况
    • 对原始图片文件夹进行存在性检查,如果不存在则直接终止脚本并输出提示信息。
    • 对于压缩后图片保存的文件夹,若不存在则使用mkdir函数创建它,同时设置合适的权限(这里设置为0777且开启递归创建功能,在实际应用中可根据安全策略调整权限设置)。
  3. 遍历图片文件
    • 通过scandir函数获取原始图片文件夹下的所有文件列表,然后循环遍历这个列表。
    • 在循环中,跳过表示当前目录(.)和上级目录(..)的特殊项,接着获取每个文件的完整路径,并使用getimagesize函数判断其是否为有效的图片文件,如果不是则跳过该文件的处理。
  4. 根据图片类型创建图像资源
    依据getimagesize函数返回的图片类型信息(通过其索引为 2 的值来判断),使用不同的imagecreatefromXXX函数(如imagecreatefromjpegimagecreatefrompngimagecreatefromgif等)创建对应的图像资源,以便后续进行压缩操作。对于不支持的图片类型则直接跳过该文件处理。
  5. 获取图片尺寸并构建保存路径
    • 获取已创建图像资源的宽度(imagesx函数)和高度(imagesy函数),虽然在这个简单示例中未直接利用尺寸做复杂处理(比如按比例缩放等),但这些信息在一些更复杂的压缩场景中可能会用到。
    • 构建压缩后图片保存的路径,就是在压缩后图片保存文件夹路径基础上加上文件名,方便后续保存压缩后的图片。
  6. 进行图片压缩并保存
    根据图片的原始类型,使用对应的imageXXX保存函数(如imagejpegimagepngimagegif等)将处理后的图像(也就是经过压缩后的图像)保存到指定的压缩后图片保存路径中,同时传递相应的压缩参数(比如imagejpeg中传递压缩质量参数,imagepng中传递压缩级别参数等)。
  7. 释放图像资源
    在完成一张图片的压缩保存后,使用imagedestroy函数释放之前创建的图像资源,避免内存占用过多,然后继续循环处理下一张图片,直到所有图片都处理完毕。

请注意,上述代码只是一个简单的基础示例,在实际应用中,你可能还需要考虑更多情况,比如对图片进行按比例缩放以更好地控制大小、更精细地处理不同图片格式的特点、处理可能出现的错误情况以及优化代码性能等。