2013-04-07 80 views
13

Tôi muốn phân tích cú pháp tệp SVG bằng cách sử dụng python để trích xuất tọa độ/đường dẫn (Tôi tin rằng điều này được liệt kê trong ID "đường dẫn", cụ thể là d = "..." />). Dữ liệu này cuối cùng sẽ được sử dụng để điều khiển CNC 2 trục.Trình phân tích cú pháp SVG Python

Tôi đã tìm kiếm trên SO và Google cho các thư viện có thể trả về chuỗi đường dẫn như vậy để tôi có thể phân tích cú pháp tiếp theo, nhưng không có kết quả. Thư viện đó có tồn tại không?

Trả lời

18

biến đổi Lờ đi, bạn có thể trích xuất các chuỗi đường đi từ tập tin SVG lên như vậy:

from xml.dom import minidom 

doc = minidom.parse(svg_file) # parseString also exists 
path_strings = [path.getAttribute('d') for path 
       in doc.getElementsByTagName('path')] 
doc.unlink() 
+1

Bạn có bất cứ lời đề nghị khi biến đổi là quan trọng? – Veech

+0

@Veech: Nếu có biến đổi, điều đó có lẽ quan trọng. Thật không may, phải mất thêm * lot * mã để xử lý chúng. – icktoofay

+1

Vâng, tôi đã nhận ra điều đó. Tôi đã tìm thấy [svgano's svg repo] (https://github.com/cjlano/svg) là đủ tốt (với một số sửa đổi). – Veech

4

Lấy d-chuỗi có thể được thực hiện trong một hoặc hai dòng sử dụng svgpathtools.

from svgpathtools import svg2paths 
paths, attributes = svg2paths('some_svg_file.svg') 

đường là danh sách các đối tượng svgpathtools Path (chỉ chứa các thông tin đường cong, không có màu sắc, phong cách, vv). thuộc tính là danh sách các đối tượng từ điển tương ứng lưu trữ thuộc tính của từng đường dẫn.

Tổ, nói, in ra d-chuỗi sau đó ...

for k, v in enumerate(attributes): 
    print v['d'] # print d-string of k-th path in SVG 
Các vấn đề liên quan