获取SVG绘图的边界框

问题描述 投票:0回答:2

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

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

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

我是 Python 初学者,但

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

感谢您的任何提示并为我指明了正确的方向。

python svg bounding-box
2个回答
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")

0
投票

这个简单的包就可以完成这项工作:svgpathtools

这是一个例子:

from svgpathtools import parse_path

path = 'M 0,0 H 4.681 V 0.234 H 0 V 0 m 2.457,-2.223 v 4.68 H 2.223 v -4.68 h 0.234'
path_alt = parse_path(path)
print(path_alt.bbox())

# output: (0.0, 4.681, -2.223, 2.457)
© www.soinside.com 2019 - 2024. All rights reserved.