svg 是使用 xml 來描述二維圖形和繪圖程式的語言。
svg檔案包含的形狀如下:
用於路徑的命令如下:
m = moveto
l = lineto
h = horizontal lineto
v = vertical lineto
c = curveto
s = smooth curveto
q = quadratic belzier curve
t = smooth quadratic belzier curveto
a = elliptical arc
z = closepath
注釋:以上所有命令均允許小寫字母。大寫表示絕對定位,小寫表示相對定位。
以上形狀的效果如下:
svg檔案基於xml,針對xml解析的python庫較多,這裡採用elementtree進行解析。
element 物件的常用屬性:
解析流程如下:
將svg檔案傳入elementtree模組,獲取xml樹根。
先獲取svg圖形寬高。
對xml樹枝進行遍歷,符合svg圖形的樹枝,對於圖形引數進行解析。
主函式如下:
defparser
(svg_file)
: tree = et.parse(svg_file)
root = tree.getroot(
) width = root.get(
'width'
) height = root.get(
'height')if
len(width)==0
orlen
(height)==0
:print
"width or height is 0"
exit(1)
if"mm"
in width:
width = width[:-
2]if"mm"
in height:
height = height[:-
2]print width, height
for elem in root.
iter()
:try
: _, tag_suffix = elem.tag.split(
'}')
except valueerror:
continue
if tag_suffix in svg_shapes:
tag_suffix = tag_suffix.capitalize(
)print tag_suffix
shape_class =
globals()
[tag_suffix]
(elem)
圖形解析以矩形為例,需要獲取矩形的起始點及長寬:
class
rect
:def
__init__
(self, xml_node)
: self.xml_node = xml_node
if self.xml_node is
notnone
: rect_el = self.xml_node
self.x =
float
(rect_el.get(
'x')
)if rect_el.get(
'x')
else
0 self.y =
float
(rect_el.get(
'y')
)if rect_el.get(
'y')
else
0 self.rx =
float
(rect_el.get(
'rx'))
if rect_el.get(
'rx'
)else
0 self.ry =
float
(rect_el.get(
'ry'))
if rect_el.get(
'ry'
)else
0 self.width =
float
(rect_el.get(
'width'))
if rect_el.get(
'width'
)else
0 self.height =
float
(rect_el.get(
'height'))
if rect_el.get(
'height'
)else
0print
("rect: x=%f, y=%f, rx=%f, ry=%f, width=%f, height=%f"
%(self.x, self.y, self.rx, self.ry, self.width, self.height)
)else
: self.x = self.y = self.rx = self.ry = self.width = self.height =
0print
("rect: unable to get the attributes for %s"
, self.xml_node)
Python實現解析XML檔案
專案名收件人 負責人上面是測試的xml檔案。針對上述的格式xml,可以利用如下解析方法。coding utf 8 author yangxin ryan import xml.dom.minidom class xmlparser object def sql xml parser self,xml...
載入pdf C 實現svg檔案轉PDF檔案
本文分享乙個用 c 編寫的 svg 轉 pdf 的類庫。前段時間工作中需要將 svg 檔案轉換成 pdf 檔案,經過一番研究決定在兩個現成類庫的基礎上進行一些二次開發來實現,現在分享出來供使用。類庫已經放到 nuget 上,可以通過如下命令進行安裝 install package ihawksvg2...
python處理svg 平移 旋轉 svg平移縮放
svg平移縮放,我剛開始嘗試的是自己處理外層容器的控制,結果發現能用,但是效果不太好,有拖尾現象,後來用個js庫svg pan zoom即可。如果想支援手機端手勢操作,需要先安裝hammer.js。html中有這樣乙個svg標籤 然後實現方法 查詢該id元素並呼叫svgpanzoom初始化,最後在頁...