PHPで画像を処理する場合、特定の領域の変更、背景の交換、単に画像のラベル付けなど、画像の特定のピクセルを再色付けする必要がある場合があります。このシナリオでは、 ImageColorresolve()とImageSetPixel()は非常に実用的なペアです。
ImageColorresolve()関数の関数は、既存の画像リソースで指定された色(RGB)に最も近い既存の色インデックスを見つけることです。見つからない場合は、新しい色を割り当てようとします。一部の画像には限られた数(特にパレット画像)があるため、これはImageColorAllocate()のみを使用するよりも柔軟です。
関数プロトタイプは次のとおりです。
int imagecolorresolve ( GdImage $image , int $red , int $green , int $blue )
$画像:画像リソース
$ red 、 $ green 、 $ blue :見つけたり作成したりする色の成分
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()は個々のピクセルレベルをうまく制御できます。この組み合わせは、画像修理、ローカルの変更、動的画像の生成などのシーンに非常に適しています。