获取SVG绘图的边界框

the*_*ozh 5 python svg bounding-box

我想提取 SVG 绘图的边界框。

由于 Python 已经在系统上可用并且还用于执行其他任务,因此我不想使用 JavaScript 或任何其他语言。我的理解是是否可以计算单个元素的边界框(但我不知道如何计算)。

整个绘图的边界框只是所有元素的最小和最大x,y值a,因此可能需要计算所有元素的边界框。

我是一个Python初学者,但svgwrite可能不是正确的模块,到目前为止我对rsvg在Windows系统上安装感到害怕。

小智 1

可能有更直接的方法来实现此目的,但类似的方法应该可以满足您的要求。

您可以使用该方法将文件转换为路径对象列表svg2paths并迭代它们。

from svgpathtools import svg2paths

def get_bbox(svg_file):
    paths, _ = svg2paths(svg_file)

    for i, path in enumerate(paths):
        if i == 0:
            # Initialise the overall min-max with the first path
            xmin, xmax, ymin, ymax = path.bbox()
        else:
            # Expand bounds to match path bounds if needed
            p_xmin, p_xmax, p_ymin, p_ymax = path.bbox()
            xmin = p_xmin if p_xmin < xmin else xmin
            xmax = p_xmax if p_xmax > xmax else xmax
            ymin = p_ymin if p_ymin < ymin else ymin
            ymax = p_ymax if p_ymax > ymax else ymax
    
    print(xmin, xmax, ymin, ymax)

get_bbox("myfile.svg")
Run Code Online (Sandbox Code Playgroud)