这个软件包中的类有助于对可缩放矢量图形(SVG)图像进行解析、规范化处理、绘制和光栅化。实现此功能的主要接口是通过wx.svg.SVGimage类,该类提供了与wxPython的各种集成。反过来,它使用围绕NanoSVG库(github.com/memononen/n…)的一组包装器来完成底层工作。SVG规范中定义的一些功能尚不支持,但似乎所有常用的功能都已具备。
示例1
将SVG图像绘制到窗口上,使其缩放以适应窗口大小,并使用wx.GraphicsContext,可以按如下方式完成:
def __init__(self, ...):
...
self.img = wx.svg.SVGimage.CreateFromFile(svg_filename)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, event):
dc = wx.PaintDC(self)
dc.SetBackground(wx.Brush('white'))
dc.Clear()
dcdim = min(self.Size.width, self.Size.height)
imgdim = min(self.img.width, self.img.height)
scale = dcdim / imgdim
width = int(self.img.width * scale)
height = int(self.img.height * scale)
ctx = wx.GraphicsContext.Create(dc)
self.img.RenderToGC(ctx, scale)
由于它是使用等效的图形上下文(GC)基本图元来绘制SVG形状和路径的,因此在该上下文中可能已激活的任何现有变换都会自动应用于SVG形状。
请注意,并非所有的图形上下文(GraphicsContext)后端都是一样的。具体来说,GDI+后端(在Windows上是默认后端)根本无法支持SVG图像中常用的一些功能,比如对渐变应用变换。Windows上的Direct2D后端表现要好得多,Windows上的Cairo后端也非常出色。在macOS和Linux上的默认后端表现也很不错。
示例2
如果你尚未使用wx.GraphicsContext,那么也可以轻松地创建一个wx.Bitmap来替代。例如,上面代码中的最后两行可以用以下代码替换,并且基本上可以实现相同的功能:
bmp = self.img.ConvertToBitmap(scale=scale, width=width, height=height)
dc.DrawBitmap(bmp, 0, 0)
示例3
上面展示的ConvertToBitmap方法在将SVG图像缩放、平移以及调整大小转换为位图方面提供了很多控制选项,但在大多数情况下,你可能只是想要获取一个特定大小的位图来用作图标或类似用途ConvertToScaledBitmap方法提供了一个更简便的API来为你实现这一点。它会自动将SVG图像缩放到以像素为单位的所需大小。
bmp = img.ConvertToScaledBitmap(wx.Size(24,24))
如果平台支持的话,可以可选地接受一个窗口参数,该参数将根据该窗口的内容缩放因子自动调整大小。并且如果该窗口位于高分辨率(HiDPI)显示屏上,位图的大小也将相应地进行调整。
bmp = img.ConvertToScaledBitmap(wx.Size(24,24), self)
模块概述
| _nanosvg | NanoSVG 是一个来自……的 “简单、纯粹的单头文件式SVG解析器” 。 |
|---|
类概述
| SVGimage | SVGimage类提供了多种加载和使用SVG图像的方法。 |
|---|