有一位微信朋友要我给他批量处理一批图片。原因是他在做资料的时候,每次把图片复制粘贴到表格以后,都需要手动调整图片大小,特别浪费时间,他希望,我把图片批量压缩成表格大小,然后直接复制粘贴上去就可以了。我想了一下,这个使用php的gd库就可以自动完成。
那么思路就是:
1、文件夹里old有很多图片,图片格式包括jpg、png、jpeg
2、把文件夹old里的所有图片使用php压缩成宽100、高100的图片,压缩后的图片格式统一为png
3、压缩后的图片存放在nwe文件夹。文件名称为time()。
4、要求使用gd库,要求支持php8。

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."。
