PHP で画像の色の x、y 位置を取得する方法はありますか? 例:この画像では
開始点、つまり RED の x、y 位置を取得できますか?
ユーザーが画像の特定の部分の色を変更するオプションを作成する必要があります。したがって、ユーザーがこの画像の赤色を青色に変更したい場合は、imagefill() 関数を使用して色を変更しますが、 x、y座標が必要です。これが理にかなっていることを願っています。
次のようなことを試してください:
// applied only to a PNG images, You can add the other format image loading for Yourself
function changeTheColor($image, $findColor, $replaceColor) {
$img = imagecreatefrompng($image);
$x = imagesx($img);
$y = imagesy($img);
$newImg = imagecreate($x, $y);
$bgColor = imagecolorallocate($newImg, 0, 0, 0);
for($i = 0; $i < $x; $i++) {
for($j = 0; $j < $y; $j++) {
$ima = imagecolorat($img, $i, $j);
$oldColor = imagecolorsforindex($img, $ima);
if($oldColor['red'] == $findColor['red'] && $oldColor['green'] == $findColor['green'] && $oldColor['blue'] == $findColor['blue'] && $oldColor['alpha'] == $findColor['alpha'])
$ima = imagecolorallocatealpha($newImage, $replaceColor['red'], $replaceColor['green'], $replaceColor['blue'], $replaceColor['alpha']);
}
imagesetpixel($newImg, $i, $j, $ima);
}
}
return imagepng($newImg);
}
ここでは、$findColor
と$replaceColor
が次の構造の配列であることを期待しています。
$color = array(
'red' => 0,
'green' => 0,
'blue' => 0,
'alpha' => 0,
);
コードを試しませんでしたが、少なくとも正しい方法を示すはずです。すべてのピクセルをループし、そのピクセルの色を確認し、探している色である場合は、$replaceColor
. そうでない場合は、まったく同じ色が新しい画像のまったく同じ位置に配置されます。
2 つのfor
ループを使用するため、大きな画像では非常に時間とメモリを消費する可能性があります。