1

这是一个问题:假设我们有一个透明的 200x200 png 图像,并且有一个从 x,y (50,50) 开始的形状,宽度为 50 像素,高度为 20 像素。

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处发现了一个不透明点。现在,当以相同的方式搜索最左边的点时,您可以从 37 (74 / 2) 开始,而不是从x = 150 (width / 2) 开始,因为您已经知道在x = 74处一个对象。

于 2010-07-08T13:07:44.667 回答