在處理圖像時,尤其是批量圖像處理的場景中,經常會遇到需要翻轉(水平或垂直)圖像的需求。 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 腳本,你可以快速實現批量圖像翻轉操作。不論是圖片批量整理、自動化處理,還是在線圖片工具開發,這樣的小功能都能大大提升效率。如果你打算將這個腳本整合到網站上,別忘了加上簡單的用戶界面或文件上傳邏輯,讓功能更完整!