2013-02-18 32 views
0

我有JPG圖像和inputsvgdraw,一個用於圖像註釋的閃光工具(http://www.mainada.net/inputdraw),我可以跟蹤生成svg數據的線條。我如何閱讀pycairo中的svg數據描邊?

SVG DATAS樣本:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 488 325"><g fill="none" stroke-miterlimit="6" stroke-linecap="round" stroke-linejoin="round"><path d="M 307 97 l 0 -1 l -2 -1 l -10 -2 l -20 -1 l -25 5 l -22 9 l -10 9 l 0 9 l 2 12 l 16 18 l 25 11 l 25 5 l 17 -1 l 6 -4 l 3 -7 l -1 -12 l -6 -16 l -7 -13 l -11 -12 l -11 -14 l -9 -5" opacity="1" stroke="rgb(170,37,34)" stroke-width="5"/></g></svg>. 

什麼功能可以管理這些數據?

回答

1

您可以使用librsvg來讀取SVG輸入,然後使用cairo來渲染它。如果您想在初始圖像中使用SVG繪製註釋,則可能需要使用PILnumpy,因爲cairo本身不會加載許多不同的圖像格式。

下面是一個實現了(唯一的區別是,其實我有一個特設​​包裝爲rsvg測試吧)爲例:

import sys 
import rsvg 
import cairo 
import numpy 
from PIL import Image 

# Load an image that supposedly has the same width and height as the svg one. 
img_rgba = numpy.array(Image.open(sys.argv[1]).convert('RGBA')) 
data = numpy.array(img_rgba.tostring('raw', 'BGRA')) 
width, height = img_rgba.size 

surface = cairo.ImageSurface.create_for_data(data, 
     cairo.FORMAT_ARGB32, width, height) 
ctx = cairo.Context(surface) 

# "Paste" the svg into the image. 
svg = rsvg.Handle(file=sys.argv[2]) 
svg.render_cairo(ctx) 

surface.write_to_png(sys.argv[3])