wxPython官方文档中文翻译 - wx.svg

108 阅读2分钟

原文:docs.wxpython.org/wx.svg.html

这个软件包中的类有助于对可缩放矢量图形(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)

模块概述

_nanosvgNanoSVG 是一个来自……的 “简单、纯粹的单头文件式SVG解析器” 。

类概述

SVGimageSVGimage类提供了多种加载和使用SVG图像的方法。