您的位置:首页 > 新闻 > 热点要闻 > 解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

2024/12/24 8:21:15 来源:https://blog.csdn.net/engchina/article/details/140277075  浏览:    关键词:解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

    • 1. 函数定义
    • 2. 函数说明
    • 3. 函数实现
    • 举例说明
    • 总结

今天,我们来学习一个有趣的Python函数。这个函数可以帮助我们转换PDF文档中的坐标。虽然听起来很复杂,但是我们可以通过一个简单的例子来理解它。

1. 函数定义

def rect_to_bbox(rect: Tuple[float, float, float, float],height: float,
) -> Tuple[float, float, float, float]:

这行代码定义了一个名为rect_to_bbox的函数。它需要两个参数:

  • rect: 这是一个包含4个小数的元组,代表PDF中一个矩形的坐标。
  • height: 这是一个小数,表示PDF页面的高度。

函数会返回一个新的包含4个小数的元组,这个元组代表转换后的坐标。

2. 函数说明

"""
Converts a PDF rectangle coordinates (x1, y1, x2, y2) to a bounding box in the specified
coordinate system where the vertical axis is measured from the top of the page.
"""

这段注释解释了函数的作用:它把PDF中的矩形坐标转换成一个新的坐标系统。在新的系统中,我们从页面的顶部开始测量竖直方向的距离。

3. 函数实现

x1, y2, x2, y1 = rect
y1 = height - y1
y2 = height - y2
return (x1, y1, x2, y2)

这是函数的主要部分。让我们一步步来看:

  1. x1, y2, x2, y1 = rect: 这行代码把rect中的4个数字分别赋值给x1, y2, x2, y1
  2. y1 = height - y1: 这行代码计算新的y1值。
  3. y2 = height - y2: 这行代码计算新的y2值。
  4. return (x1, y1, x2, y2): 最后,函数返回新的坐标。

举例说明

想象你有一张很大的纸(这就是我们的PDF页面),纸的高度是100厘米。

在这张纸上,有一个小方框,它的坐标是(10, 20, 30, 40)。这里:

  • 10 是左边缘到纸左边的距离
  • 20 是下边缘到纸底部的距离
  • 30 是右边缘到纸左边的距离
  • 40 是上边缘到纸底部的距离

但是,我们想要改变测量方式。我们想从纸的顶部开始测量,而不是从底部。

这时,我们就可以使用rect_to_bbox函数:

new_coordinates = rect_to_bbox((10, 20, 30, 40), 100)

函数会这样计算:

  1. x1 还是 10 (左边缘到纸左边的距离不变)
  2. 新的y1 = 100 - 40 = 60 (从顶部到上边缘的距离)
  3. x2 还是 30 (右边缘到纸左边的距离不变)
  4. 新的y2 = 100 - 20 = 80 (从顶部到下边缘的距离)

所以,new_coordinates的值会是(10, 60, 30, 80)。

这就像我们把纸翻了个个,从上面开始量尺寸,而不是从下面开始。但是左右的距离保持不变。

通过这种方式,我们就可以更方便地处理PDF中的坐标了!

总结

这个函数虽然看起来复杂,但它其实就是在帮我们"翻转"坐标系。它让我们可以更容易地理解和使用PDF中的位置信息。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com