特にバッチ画像処理シナリオで画像を処理する場合、多くの場合、フリップ(水平または垂直)画像が必要です。 PHPはサーバー側の言語ですが、組み込みのGD画像処理ライブラリを使用してこの機能を簡単に実装できます。この記事では、バッチが指定されたディレクトリ内のすべての画像ファイルを覆し、フリップされた画像を別のディレクトリに保存するPHPスクリプトを作成する方法を教えてください。
サーバー環境にGDライブラリが有効になっていることを確認してください。次の方法で確認できます。
<?php
phpinfo();
?>
ブラウザでこのスクリプトにアクセスしたら、 GDサポートを検索します。有効になっている場合は、画像処理操作を実行できます。
次の手順を完了する必要があります。
画像を含むソースディレクトリを指定します。
ディレクトリ内のすべての画像ファイルをトラバースします。
GDライブラリを使用して各画像をロードします。
画像をフリップします(水平または垂直);
Flipped Imageをターゲットディレクトリに保存します。
これが完全な例です。
<?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スクリプトを使用して、バッチイメージフリップ操作をすばやく実装できます。写真、自動処理、またはオンライン画像ツール開発のバッチソートであろうと、このような小さな機能は効率を大幅に改善できます。このスクリプトをWebサイトに統合する予定がある場合は、単純なユーザーインターフェイスを追加したり、ロジックをアップロードして機能をより完全にすることを忘れないでください。