如何计算图像的不透明部分以PHP开始和结束的位置?
这里有一个问题:假设我们有一张200x200的png图像,它是透明的,有一个形状从x,y(50,50)开始,宽度为50px,高度为20px 使用PHP(gdlib或imagemagick)是否有任何方法可以获得形状相对于图像大小的位置?对于给定的示例,脚本应该返回(x1=50,y1=70,x2=100,y2=70)它是什么意思“从开始的形状”?例如,对于椭圆,您希望找到覆盖整个椭圆的矩形的左上角 如果是,则可以从上到下循环通过图像的每个像素(如何计算图像的不透明部分以PHP开始和结束的位置?,php,transparency,imagemagick,gdlib,Php,Transparency,Imagemagick,Gdlib,这里有一个问题:假设我们有一张200x200的png图像,它是透明的,有一个形状从x,y(50,50)开始,宽度为50px,高度为20px 使用PHP(gdlib或imagemagick)是否有任何方法可以获得形状相对于图像大小的位置?对于给定的示例,脚本应该返回(x1=50,y1=70,x2=100,y2=70)它是什么意思“从开始的形状”?例如,对于椭圆,您希望找到覆盖整个椭圆的矩形的左上角 如果是,则可以从上到下循环通过图像的每个像素(getpixel将为您提供像素的颜色),搜索不透明的最
getpixel
将为您提供像素的颜色),搜索不透明的最顶部和最底部点(找到时结束循环)。这将是您的y1和y2点。然后,在y1-y2范围内从左到右循环,找到x1和x2
这可能不是很优化,所以您可能想想象一个更好的算法。例如,如果图像为300×200像素,则可以通过以下方式搜索最顶部的点:
顺便说一下,当你扫描第25行时,你在坐标x=74,y=50处发现了一个不透明的点。现在,当以相同的方式搜索最左边的点时,您可以从37(74/2)开始搜索,而不是从x=150(宽度/2)开始,因为您已经知道在x=74处有一个对象。Hi,thnx是真正有用的答案。我对一个长方形感兴趣。这种方法(通过每个像素循环)不是有太多的开销吗?嗯,我想有更多的优化方法。现在,如果您停止搜索找到的最上面的像素,或最右边的像素,等等,它已经优化了很多东西。我编辑了我的问题,包括优化建议(即减少开销)。