我想做类似的事情:
import image
image.display_image('http://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg')
它会以图像的形式出现。
PS 我想要 PNG 或 JPEG,而不是 GIF。
这个问题有些陈旧,但是由于在网上不容易找到有关如何轻松执行此操作的信息,因此我发布了此答案,希望将来对其他人有用。
要栅格化 SVG 并将其放入 ImageTk.PhotoImage 对象中,您可以在用于 tkinter gui 的类中执行此操作:
def svgPhotoImage(self,file_path_name):
import Image,ImageTk,rsvg,cairo
"Returns a ImageTk.PhotoImage object represeting the svg file"
# Based on pygame.org/wiki/CairoPygame and http://bit.ly/1hnpYZY
svg = rsvg.Handle(file=file_path_name)
width, height = svg.get_dimension_data()[:2]
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(width), int(height))
context = cairo.Context(surface)
#context.set_antialias(cairo.ANTIALIAS_SUBPIXEL)
svg.render_cairo(context)
tk_image=ImageTk.PhotoImage('RGBA')
image=Image.frombuffer('RGBA',(width,height),surface.get_data(),'raw','BGRA',0,1)
tk_image.paste(image)
return(tk_image)
然后以这种方式在 Frame 小部件(例如 mainFrame)上显示图像:
tk_image=self.svgPhotoImage(filename)
mainFrame.configure(image=tk_image)
如果要保存图片,可以返回 image 而不是 tk_image 并以这种方式保存:
image.save(filename) # Image format is autodected via filename extension