当前位置: 首页> 最新文章列表> 批量翻转一批图像文件的 PHP 脚本编写

批量翻转一批图像文件的 PHP 脚本编写

M66 2025-05-31

在处理图像时,尤其是批量图像处理的场景中,经常会遇到需要翻转(水平或垂直)图像的需求。PHP 虽然是一种服务器端语言,但通过其内置的 GD 图像处理库,我们可以很方便地实现这一功能。本文将教你如何编写一个 PHP 脚本,批量翻转指定目录下的所有图像文件,并将翻转后的图像保存到另一个目录。

一、准备工作

确保你的服务器环境已经启用了 GD 库。你可以通过以下方式进行检查:

<?php
phpinfo();
?>

在浏览器中访问这个脚本后,搜索 GD Support,如果是 Enabled,那么你就可以进行图像处理操作了。

二、基本逻辑

我们需要完成以下步骤:

  1. 指定一个包含图像的源目录;

  2. 遍历目录下所有的图像文件;

  3. 使用 GD 库加载每个图像;

  4. 翻转图像(水平或垂直);

  5. 保存翻转后的图像到目标目录。

三、示例代码

下面是一个完整的示例脚本:

<?php

$sourceDir = __DIR__ . '/images/originals';
$targetDir = __DIR__ . '/images/flipped';

// 创建目标目录(如果不存在)
if (!file_exists($targetDir)) {
    mkdir($targetDir, 0755, true);
}

// 支持的图像类型
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif'];

// 扫描源目录下的文件
$files = scandir($sourceDir);

foreach ($files as $file) {
    $filePath = $sourceDir . '/' . $file;

    // 跳过 . 和 ..
    if (in_array($file, ['.', '..'])) {
        continue;
    }

    // 获取文件扩展名
    $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));

    // 过滤非图像文件
    if (!in_array($extension, $allowedExtensions)) {
        continue;
    }

    // 加载图像
    switch ($extension) {
        case 'jpg':
        case 'jpeg':
            $image = imagecreatefromjpeg($filePath);
            break;
        case 'png':
            $image = imagecreatefrompng($filePath);
            break;
        case 'gif':
            $image = imagecreatefromgif($filePath);
            break;
        default:
            continue 2;
    }

    // 获取图像尺寸
    $width = imagesx($image);
    $height = imagesy($image);

    // 创建空画布
    $flipped = imagecreatetruecolor($width, $height);

    // 水平翻转图像
    for ($x = 0; $x < $width; $x++) {
        imagecopy($flipped, $image, $width - $x - 1, 0, $x, 0, 1, $height);
    }

    // 保存新图像
    $targetPath = $targetDir . '/' . $file;
    switch ($extension) {
        case 'jpg':
        case 'jpeg':
            imagejpeg($flipped, $targetPath);
            break;
        case 'png':
            imagepng($flipped, $targetPath);
            break;
        case 'gif':
            imagegif($flipped, $targetPath);
            break;
    }

    // 清理内存
    imagedestroy($image);
    imagedestroy($flipped);

    echo "已处理图像:$file\n";
}

echo "批量翻转完成。访问翻转后的图像可前往:http://m66.net/images/flipped/";

?>

四、注意事项

  • 确保目录权限设置正确,PHP 进程有权访问和写入目标目录;

  • 如果你希望进行垂直翻转,只需修改翻转逻辑,将 imagecopy() 中的坐标进行相应调整即可;

  • 对于透明 PNG 或 GIF 图像,可能需要额外的透明处理逻辑,否则会出现黑底。

五、结语

通过本文提供的 PHP 脚本,你可以快速实现批量图像翻转操作。不论是图片批量整理、自动化处理,还是在线图片工具开发,这样的小功能都能大大提升效率。如果你打算将这个脚本整合到网站上,别忘了加上简单的用户界面或文件上传逻辑,让功能更完整!