php教程

php gd库批量压缩文件夹里的所有图片

php教程 51源码 2023-09-01 人阅读

有一位微信朋友要我给他批量处理一批图片。原因是他在做资料的时候,每次把图片复制粘贴到表格以后,都需要手动调整图片大小,特别浪费时间,他希望,我把图片批量压缩成表格大小,然后直接复制粘贴上去就可以了。我想了一下,这个使用php的gd库就可以自动完成。


那么思路就是:


1、文件夹里old有很多图片,图片格式包括jpg、png、jpeg

2、把文件夹old里的所有图片使用php压缩成宽100、高100的图片,压缩后的图片格式统一为png

3、压缩后的图片存放在nwe文件夹。文件名称为time()。

4、要求使用gd库,要求支持php8。


php gd库批量压缩文件夹里的所有图片


php压缩图片的代码就是:


<?php
// 原始文件夹路径
$oldFolderPath = '/path/to/old';
// 压缩文件夹路径
$newFolderPath = '/path/to/new';
// 获取原始文件夹中的所有图片文件
$oldFiles = glob($oldFolderPath . '/*.{jpg,jpeg,png}', GLOB_BRACE);
// 如果新文件夹不存在则创建
if (!is_dir($newFolderPath)) {
    mkdir($newFolderPath);
}
// 遍历原始文件夹中的每个图片文件并进行压缩和保存
foreach ($oldFiles as $oldFile) {
    // 获取文件名
    $fileName = basename($oldFile);
    
    // 获取文件扩展名
    $fileExtension = pathinfo($oldFile, PATHINFO_EXTENSION);
    
    // 生成新文件名
    $newFileName = time() . '.' . $fileExtension;
    
    // 创建新文件的路径
    $newFilePath = $newFolderPath . '/' . $newFileName;
    
    // 创建新的缩略图
    $thumbnail = imagecreatetruecolor(100, 100);
    
    // 根据文件扩展名读取原始图像
    switch ($fileExtension) {
        case 'jpg':
        case 'jpeg':
            $sourceImage = imagecreatefromjpeg($oldFile);
            break;
        case 'png':
            $sourceImage = imagecreatefrompng($oldFile);
            break;
        default:
            continue; // 跳过不支持的扩展名
    }
    
    // 将原始图像复制并调整大小到缩略图上
    imagecopyresized($thumbnail, $sourceImage, 0, 0, 0, 0, 100, 100, imagesx($sourceImage), imagesy($sourceImage));
    
    // 保存缩略图到新文件夹中
    imagepng($thumbnail, $newFilePath);
    
    // 销毁图像资源
    imagedestroy($thumbnail);
    imagedestroy($sourceImage);
}
?>


代码说明:

1. 将`/path/to/old`替换为实际的原始文件夹路径

2. 将`/path/to/new`替换为实际的压缩文件夹路径

3. 该代码使用GD库进行图片压缩,确保已在PHP中启用GD库。


上面的代码,如果处理方法图片过多,会导致进程崩溃。现在需要优化处理,一张一张处理,处理完第一张提示处理完成,跳转下一页处理第二张,直到old所有图片处理完成。


优化后的代码:


<?php
// 原始文件夹路径
$oldFolderPath = '/path/to/old';
// 压缩文件夹路径
$newFolderPath = '/path/to/new';
// 获取原始文件夹中的所有图片文件
$oldFiles = glob($oldFolderPath . '/*.{jpg,jpeg,png}', GLOB_BRACE);
// 如果新文件夹不存在则创建
if (!is_dir($newFolderPath)) {
    mkdir($newFolderPath);
}
// 获取当前处理的图片索引
$currentImageIndex = isset($_GET['index']) ? (int)$_GET['index'] : 0;
// 处理当前图片
if ($currentImageIndex < count($oldFiles)) {
    // 获取当前图片路径
    $oldFile = $oldFiles[$currentImageIndex];
    // 获取文件名
    $fileName = basename($oldFile);
    // 获取文件扩展名
    $fileExtension = pathinfo($oldFile, PATHINFO_EXTENSION);
    // 生成新文件名
    $newFileName = time() . '.' . $fileExtension;
    // 创建新文件的路径
    $newFilePath = $newFolderPath . '/' . $newFileName;
    // 创建新的缩略图
    $thumbnail = imagecreatetruecolor(100, 100);
    // 根据文件扩展名读取原始图像
    switch ($fileExtension) {
        case 'jpg':
        case 'jpeg':
            $sourceImage = imagecreatefromjpeg($oldFile);
            break;
        case 'png':
            $sourceImage = imagecreatefrompng($oldFile);
            break;
        default:
            continue; // 跳过不支持的扩展名
    }
    // 将原始图像复制并调整大小到缩略图上
    imagecopyresized($thumbnail, $sourceImage, 0, 0, 0, 0, 100, 100, imagesx($sourceImage), imagesy($sourceImage));
    // 保存缩略图到新文件夹中
    imagepng($thumbnail, $newFilePath);
    // 销毁图像资源
    imagedestroy($thumbnail);
    imagedestroy($sourceImage);
    // 处理完成后跳转到下一张图片
    $nextImageIndex = $currentImageIndex + 1;
    header("Location: process_images.php?index=$nextImageIndex");
    exit;
} else {
    echo "All images processed successfully.";
}
?>


优化说明:

1. 将`/path/to/old`替换为实际的原始文件夹路径

2. 将`/path/to/new`替换为实际的压缩文件夹路径

3. 将该代码保存为`process_images.php`并将其放置在服务器上

4. 在浏览器中访问`process_images.php`开始处理图片

5. 该代码会一张一张地处理图片,处理完一张后会自动跳转到下一张图片进行处理,直到所有图片处理完成。处理完成后会显示"All images processed successfully."。


版权声明:文章搜集于网络,如有侵权请联系本站,转载请说明出处:https://www.51yma.cn/jiaocheng/php/1309.html
文章来源:文煞PHP笔记网-https://www.wensha.info/post/1234.html