用 Python 获取 SVG 绘图的边界框?

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

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

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

整张图的bounding box就是所有元素的最小和最大x,y值a,所以可能需要计算所有元素的bounding box

我是 Python 初学者,但

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

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

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

0
投票

可能有更直接的方法来实现这一点,但像这样的东西应该可以满足您的要求。

您可以使用

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")
© www.soinside.com 2019 - 2024. All rights reserved.