你还没有说你想用代码的 wxPython 部分实现什么。
如果您只是想显示它,请尝试以下操作:
import cairosvg
import wx
class TestFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
cairosvg.svg2png(url="test.svg", write_to="test.png")
img = wx.Image('test.png',wx.BITMAP_TYPE_PNG)
self.Image = wx.StaticBitmap(self, bitmap=wx.Bitmap(img))
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.Image, 0, wx.ALL, 10)
self.SetSizer(box)
self.Fit()
self.Show()
if __name__ == "__main__":
app = wx.App()
frame = TestFrame(None)
app.MainLoop()
您不应该在png 上使用io.StringIO(),因为cairosvg.svg2png(url="test.svg", write_to="test.png") 创建了一个文件,因此png 实际上是None,而不是图像。
记住print( your problem ) 在这种情况下png 是你的朋友。它会告诉你事情是什么。为了更加清晰,请使用print(repr( xx )) 或print(type( xx ))
编辑:
根据您的评论,以下内容可能会有所帮助:
import cairosvg
import wx
class TestFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
cairosvg.svg2png(url="test.svg", write_to="test.png")
img = wx.Image('test.png')
img.ConvertAlphaToMask(255,255,255)
bmp = wx.Bitmap(img)
self.Image = wx.StaticBitmap(self, bitmap=bmp)
self.Image.Bitmap.SaveFile('test.bmp', type=wx.BITMAP_TYPE_BMP)
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.Image, 0, wx.ALL, 10)
self.SetSizer(box)
self.Fit()
self.Show()
if __name__ == "__main__":
app = wx.App()
frame = TestFrame(None)
app.MainLoop()
涉及在保存为 bmp 之前从 png 文件中删除透明度,或者整个东西是一个巨大的黑色斑点。
您的示例图像确实应该是 .svg 图像而不是 .png