1

ここで質問です: 透明な 200x200 の png 画像があり、x,y (50,50) で始まり、幅 50px、高さ 20px の形状があるとします。

PHP (gdlib または imagemagick) を使用して、画像サイズに対する形状の位置を取得する方法はありますか? 与えられた例では、スクリプトは (x1=50, y1=70, x2=100, y2=70) を返します。

4

1 に答える 1

3

「で始まる形」とはどういう意味ですか?たとえば、楕円の場合、楕円全体をカバーする長方形の左上隅を見つけたいですか?

はいの場合、画像のすべてgetpixelのピクセルを上から下にループして、透明ではない最上部と最下部のポイントを検索できます(見つかったときにループを終了します)。それはあなたのy1y2ポイントになります。次に、同じことをy1〜y2の範囲内で左から右にループして、x1x2を見つけます。

これはおそらくあまり最適化されていないため、より良いアルゴリズムを想像することをお勧めします。たとえば、画像が300×200ピクセルの場合、次の方法で最上位のポイントを検索できます。

  1. 行100(高さ/ 2)にオブジェクトがあるかどうかを確認します。
  2. もしそうなら、行50(100/2)を探します。
  3. 行50にオブジェクトが含まれている場合は、行25(50/2)をスキャンします。
  4. 25行目が透明であると想像してみましょう。38行目(25/2 + 25)を確認する必要があるかもしれません。
  5. 38行目が透明でない場合は、32行目([25/2] / 2 + 25)を見ることができます。
  6. ..。

ちなみに、25行目をスキャンしたときに、座標x = 74、y=50に不透明な点が見つかったとします。これで、同じ方法で左端のポイントを検索する場合、x = 150(幅/ 2)から開始する代わりに、37(74/2)から開始できます。これは、x=74にオブジェクトがあることがすでにわかっているためです。

于 2010-07-08T13:07:44.667 に答える