在处理图像时,尤其是批量图像处理的场景中,经常会遇到需要翻转(水平或垂直)图像的需求。PHP 虽然是一种服务器端语言,但通过其内置的 GD 图像处理库,我们可以很方便地实现这一功能。本文将教你如何编写一个 PHP 脚本,批量翻转指定目录下的所有图像文件,并将翻转后的图像保存到另一个目录。
确保你的服务器环境已经启用了 GD 库。你可以通过以下方式进行检查:
<?php
phpinfo();
?>
在浏览器中访问这个脚本后,搜索 GD Support,如果是 Enabled,那么你就可以进行图像处理操作了。
我们需要完成以下步骤:
指定一个包含图像的源目录;
遍历目录下所有的图像文件;
使用 GD 库加载每个图像;
翻转图像(水平或垂直);
保存翻转后的图像到目标目录。
下面是一个完整的示例脚本:
<?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 脚本,你可以快速实现批量图像翻转操作。不论是图片批量整理、自动化处理,还是在线图片工具开发,这样的小功能都能大大提升效率。如果你打算将这个脚本整合到网站上,别忘了加上简单的用户界面或文件上传逻辑,让功能更完整!