PHPで画像を使用する場合、カラーマップを動的に変更することは非常に実用的なスキルです。特に、画像全体を再描画せずにパレットベースの画像で特定の色をすばやく変更したい場合、 ImageColorset()とImageColorresolve()が特に重要になります。
この記事では、画像カラーマップを動的に変更する効果と組み合わせて、これら2つの機能を使用する方法を教えてください。
ImageColorset(Resource $ image、int $ index、int $ red、int $ green、int $ blue、int $ alpha = 0):bool
この関数は、画像パレットの色インデックスの色値を直接変更できます。つまり、図のピクセルがこの色インデックスを使用すると、その色もすぐに変わります。
ImageColorresolve(Resource $ Image、int $ red、int $ green、int $ blue):int
この関数は、画像パレットの指定されたRGB色に最も近いインデックスを見つけます。正確な一致する色が見つからない場合、新しいインデックスを割り当てようとします。
これらの2つの機能を一緒に使用して、最初に変更する色を見つけることができ、次に新しい色を動的に設定できます。
単純なパレット画像があり、元の青を画像から赤に変更したいとします。
<?php
// シンプルなパレット画像を作成します
$image = imagecreate(100, 100);
// 初期色を定義します
$white = imagecolorallocate($image, 255, 255, 255); // 背景色:白
$blue = imagecolorallocate($image, 0, 0, 255); // ブラシの色:青
// 用青画一个矩形
imagefilledrectangle($image, 10, 10, 90, 90, $blue);
// 动态找到青的カラーインデックス
$targetIndex = imagecolorresolve($image, 0, 0, 255);
// 使用 imagecolorset 修改青为赤色
// パラメーターはです:画像リソース、カラーインデックス、赤、緑、青、透明性
imagecolorset($image, $targetIndex, 255, 0, 0);
// ブラウザに画像を出力します
header('Content-Type: image/png');
imagepng($image);
// 無料のメモリ
imagedestroy($image);
?>
このコードが実行された後、元の青い長方形が赤くなり、非常に絹のようなものがあります。
このメソッドは、Palette画像(つまり、 ImageCreate()で作成されたGIFまたは小さな画像などのパレットベースの画像)にのみ適用されます。
True Color Images( ImageCreateTrueColor()によって作成)の場合、 ImageColorset()は無効です。
画像に複数の類似の色が同じであるがまったく同じ色ではない場合、 ImageColorresolve()を使用して見つかった色は期待していない場合があるため、画像のパレットを事前に標準化する必要がある場合があります。
たとえば、Webページ機能を開発する場合、ユーザーはボタンをクリックして画像の色を動的に変更できます。上記のソリューションを使用して、それを簡単なフォームと組み合わせて送信できます。例えば:
<form method="post" action="https://m66.net/change_color.php">
<input type="submit" name="change" value="色を変更します!">
</form>
次に、今すぐスクリプトを使用して画像を処理して、動的な色の変化の効果を実現します。
画像の色Resolve()を組み合わせてターゲットカラーインデックスを見つけ、 ImageColorset()を使用して対応する色の値を変更することにより、動的な画像の色の交換を実現するのが非常に便利です。このテクノロジーは、ゲームマップ、ダイナミックアイコンのカスタマイズ、その他のシナリオなど、固定色の領域をすばやく変更する必要がある場合に使用するのに特に適しています。
プロジェクトが多数の動的画像を処理する必要がある場合は、より強力な機能を得るには、 GDやImagicICKなどのより高度な画像処理ライブラリで使用することをお勧めします。