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