現在の位置: ホーム> 最新記事一覧> ImageColorresolve()およびImagesEtpixel()と組み合わせて画像の色を変更する方法

ImageColorresolve()およびImagesEtpixel()と組み合わせて画像の色を変更する方法

M66 2025-05-30

PHPで画像を処理する場合、特定の領域の変更、背景の交換、単に画像のラベル付けなど、画像の特定のピクセルを再色付けする必要がある場合があります。このシナリオでは、 ImageColorresolve()ImageSetPixel()は非常に実用的なペアです。

ImageColorresolve()を理解する

ImageColorresolve()関数の関数は、既存の画像リソースで指定された色(RGB)に最も近い既存の色インデックスを見つけることです。見つからない場合は、新しい色を割り当てようとします。一部の画像には限られた数(特にパレット画像)があるため、これはImageColorAllocate()のみを使用するよりも柔軟です。

関数プロトタイプは次のとおりです。

 int imagecolorresolve ( GdImage $image , int $red , int $green , int $blue )
  • $画像:画像リソース

  • $ red$ green$ blue :見つけたり作成したりする色の成分

ImagesSetPixel()を理解する

ImagesSetPixel()は、単一のピクセル、関数プロトタイプの色を設定するために使用されます。

 bool imagesetpixel ( GdImage $image , int $x , int $y , int $color )
  • $画像:画像リソース

  • $ x$ y :設定するピクセル座標

  • $ color :color Index( imageColorAllocate()ImageColorresolve()などの関数によって返されます)

実用的なアプリケーションの例

画像があり、画像((50,50)から150,150)の正方形の領域など)の特定の領域を水色にリクロールしたいとします。

これを行うことができます:

 <?php
// 写真の読み込み
$imagePath = 'https://m66.net/uploads/sample.png';
$image = imagecreatefrompng($imagePath);

if (!$image) {
    die('无法写真の読み込み');
}

// ターゲットの色:水色 (R:173, G:216, B:230)
$newColor = imagecolorresolve($image, 173, 216, 230);

// ループ交換 (50,50) 到着 (150,150) エリアのピクセル
for ($x = 50; $x <= 150; $x++) {
    for ($y = 50; $y <= 150; $y++) {
        imagesetpixel($image, $x, $y, $newColor);
    }
}

// 输出结果到着浏览器
header('Content-Type: image/png');
imagepng($image);

// 無料のメモリ
imagedestroy($image);
?>

注意すべきこと

  • 画像の権限:画像がアクセス可能で正しいパスがあることを確認してください(この例ではhttps://m66.net/uploads/sample.pngを使用しています)。

  • 色の量制限:パレット画像の場合、PHPのGDライブラリは最大256色しか使用できません。 ImageColorresolve()を超えると、すでに利用可能な最も近い色を返す場合があります。

  • パフォーマンスの問題:大規模にImagesSetPixel()を使用すると遅くなります。大型エリアピクセルを効率的に処理する必要がある場合は、 ImageFilledRectangle()または直接操作画像データ( ImageCopy()など)の使用を検討する必要があります。

  • フォーマットサポート:この例ではPNGを使用します。もちろん、他の形式を処理するためにImageCreatefromJpeg()ImageCreateFromGIF() 、およびその他の関数を使用することもできます。

要約します

ImageColorresolve()を使用すると、色のマッチングと割り当ての問題を柔軟に処理できますが、 ImagesetPixel()は個々のピクセルレベルをうまく制御できます。この組み合わせは、画像修理、ローカルの変更、動的画像の生成などのシーンに非常に適しています。