2013-04-07 19 views
13

Koordinatları/yolları ayıklamak için python kullanarak bir SVG dosyasını ayrıştırmak istiyorum (bunun "yol" kimliğinin altında, özellikle de d = "..." />) olduğuna inanıyorum. Bu veriler en sonunda 2 eksenli bir CNC sürmek için kullanılacaktır.Python SVG ayrıştırıcı

SO ve Google'da kütüphaneler için arama yaptım, böylece bu yolların dizelerini döndürebilir, böylece ayrıştırabilirim, ancak boşuna. Böyle bir kütüphane var mı?

cevap

18

yok sayılması dönüşümleri, bunu gibi bir SVG uzanan yol dizeleri çıkarabilir:

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

Eğer dönüşümler önemli olduğunda herhangi bir öneriniz var mı ... o zaman d-dizeleri yazdırmak için? – Veech

+0

@Veech: Eğer bir dönüşüm varsa, bu muhtemelen önemlidir. Maalesef bunları işlemek için * lot * daha fazla kod alır. – icktoofay

+1

Evet, bunu fark etmeye geldim. [Cjlano's svg repo] (https://github.com/cjlano/svg) yeterince iyi (bazı değişiklikler ile) olduğunu buldum. – Veech

4

d-string alınıyor bir çizgide yapılabilir veya iki svgpathtools kullanarak. yolları

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

(sadece eğri bilgileri, hiçbir renk, stiller, vb içeren) svgpathtools Yol nesnelerinin bir listesidir. öznitelikleri, her yolun özniteliklerini depolayan karşılık gelen sözlük nesneleri listesidir.

, diyelim ki,

for k, v in enumerate(attributes): 
    print v['d'] # print d-string of k-th path in SVG