我想提取 SVG 绘图的边界框。
由于系统上已经可以使用Python,并且还用于执行其他任务,所以我不想使用JavaScript 或任何其他语言。我的理解是是否可以计算单个元素的边界框(但我不知道如何计算)。
整张图的bounding box就是所有元素的最小和最大x,y值a,所以可能需要计算所有元素的bounding box
我是 Python 初学者,但
svgwrite
可能不是正确的模块,到目前为止,我对在 Windows 系统上安装 rsvg
感到害怕。
感谢您的任何提示并为我指明正确的方向。
这个简单的包将完成这项工作: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)
可能有更直接的方法来实现这一点,但像这样的东西应该可以满足您的要求。
您可以使用
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")