私は、ゲームからレンダリングされた画像を処理する PHP 画像処理ライブラリに取り組んでおり、PHP Web ホストで処理されています。画像を処理するには、赤の島 (色相が 0 または 360 の x 量内にある) を見つけて、その中のポイントを取得する必要があります (中心である必要はありませんが、できれば中心近くです)。そのような島々は、大小合わせて約 100 あります。それらは台形またはそれに近いものです。画像は PNG であり、アンチエイリアシングなしで圧縮されていないため、エッジはピクセル単位で鮮明ですが、一部の領域は他の領域よりも暗い場合があります。
現在、私が試したのはimagecolorat(
、GD で使用し、変換後に HSV 値をテストしてから、赤以外のピクセルに到達するまでその周りのポイントを試行することですが、そのプロセスが完了するまでに時間がかかり、PHP のタイムアウトが発生したようです。大きな画像を処理している場合は、5 秒の制限まで。上記の島を検出し、必ずしも中心ではなく、近くでポイントを取得するより効率的な方法はありますか?
また、台形のサイズがわかっている場合は、特定の距離内に何も来ないと仮定し、時間を節約するためにその距離をスキップしてみました。
必ずしもコードは必要ありません。正しい方向へのポインターだけです。
私の現在のコード:
function RGBToHSL($RGB) {
$r = 0xFF & ($RGB >> 0x10);
$g = 0xFF & ($RGB >> 0x8);
//をちょきちょきと切る }
$image=imagecreatefrompng($filename);
$redislands=[];
for($xpos=0; $xpos<=imagesx($image); $xpos++){
for($ypos=0; $ypos<=imagesy($image); $ypos++){
if (RGBToHSL(imagecolorat(xpos, ypos)->saturation<=20||RGBToHSL(imagecolorat(xpos, ypos)->saturation>=350){
$redislands[]=[xpos, ypos]
}
}
}