画像処理の分野では、複数の画像の統一を実現することが一般的な要件であり、特にeコマース、ソーシャルメディア、写真、その他の業界に適しています。 PHPによって提供されるImageColorMatch()関数はほとんど知られていませんが、この目標を達成するための強力なツールです。この記事では、ImageColorMatch()を使用してバッチで色の一致を効率的に処理し、完全な例ソリューションを提供する方法を紹介します。
ImageColorMatch(Resource $ Image1、Resource $ Image2):BoolはGDライブラリの関数です。その機能は、 $ image2のパレット色と$ image1の色と可能な限り一致することです。これは、$ image2の色が「 $ image1のように見える」ように調整され、色が一貫性を達成することを意味します。
ImageColorMatch()はパレット画像のみを処理できることに注意する必要があります(つまり、 ImageCreate()で作成された非Trueカラー画像)したがって、使用する前に画像をパレット画像に変換する必要があります。
すべてのターゲット画像の色参照として「参照画像」を準備します。
保留中の各画像を読み、パレット画像に変換します。
カラーマッチングにはImageColorMatch()を使用します。
結果を新しい画像ファイルとして保存します。
以下は、複数の画像のカラーマッチング処理を実装する完全な例のスクリプトです。画像ディレクトリ構造は次のとおりです。
/images/
reference.jpg
img1.jpg
img2.jpg
...
/output/
(加工された写真を保存するために使用されます)
<?php
$referencePath = 'images/reference.jpg';
$sourceDir = 'images/';
$outputDir = 'output/';
// 参照画像をロードして、パレット画像に変換します
$refImgTrueColor = imagecreatefromjpeg($referencePath);
$refImgPalette = imagecreate(imagesx($refImgTrueColor), imagesy($refImgTrueColor));
imagecopy($refImgPalette, $refImgTrueColor, 0, 0, 0, 0, imagesx($refImgTrueColor), imagesy($refImgTrueColor));
imagetruecolortopalette($refImgPalette, true, 256);
// すべてのディレクトリを繰り返します jpg 書類
$files = glob($sourceDir . '*.jpg');
foreach ($files as $file) {
if ($file === $referencePath) continue; // 参照画像をスキップします
$srcTrueColor = imagecreatefromjpeg($file);
// パレット画像を作成します
$srcPalette = imagecreate(imagesx($srcTrueColor), imagesy($srcTrueColor));
imagecopy($srcPalette, $srcTrueColor, 0, 0, 0, 0, imagesx($srcTrueColor), imagesy($srcTrueColor));
imagetruecolortopalette($srcPalette, true, 256);
// 色マッチングを適用します
imagecolormatch($refImgPalette, $srcPalette);
// 保存输出書類
$filename = basename($file);
imagejpeg($srcPalette, $outputDir . $filename);
// メモリをきれいにします
imagedestroy($srcTrueColor);
imagedestroy($srcPalette);
}
imagedestroy($refImgTrueColor);
imagedestroy($refImgPalette);
echo "処理が完了します,書類已保存到 $outputDir";
?>
パレット画像への変換が重要なステップです。そうしないと、 ImageColorMatch()は有効になりません。
パレット画像の色の数が限られているため、出力画像はある程度の色の歪みを発生させる可能性があります(最大256)。
多数の画像を処理する必要がある場合は、コマンドラインを使用してスクリプトを実行し、プロセス制御(バッチ処理など)を組み合わせて効率を向上させることをお勧めします。
スキームをコマンドラインツールとしてカプセル化するか、独自の画像管理システムに統合することもできます。たとえば、Laravelの職人コマンドシステムを組み合わせることにより、次の呼び出し方法を実装できます。
php artisan image:match-colors --reference=reference.jpg --input=images/ --output=output/
画像の色を標準化した後、eコマースプラットフォーム上の製品の表示であろうと、写真作業シリーズの表示であろうと、より統一された専門的な視覚効果が得られます。
効果のデモを表示したい場合は、次の例にアクセスして、テスト用の独自の参照画像とターゲット画像をアップロードできます。
https://m66.net/demo/image-match
ImageColorMatch()を合理的に利用することにより、画質の一貫性を改善するだけでなく、バッチプロセスで労働力と時間コストを大幅に節約できます。この記事が迅速に開始し、独自の画像カラー処理ツールチェーンを構築するのに役立つことを願っています。