wxPython 读取 SVG(3)

wxPython 读取 SVG

wx.Image 支持图片格式如下所示:

  • wx.BITMAP_TYPE_BMP – Load a Windows bitmap file.
  • wx.BITMAP_TYPE_GIF – Load a GIF bitmap file.
  • wx.BITMAP_TYPE_JPEG – Load a JPEG bitmap file.
  • wx.BITMAP_TYPE_PNG – Load a PNG bitmap file.
  • wx.BITMAP_TYPE_PCX – Load a PCX bitmap file.
  • wx.BITMAP_TYPE_PNM – Load a PNM bitmap file.
  • wx.BITMAP_TYPE_TIFF – Load a TIFF bitmap file.
  • wx.BITMAP_TYPE_TGA – Load a TGA bitmap file.
  • wx.BITMAP_TYPE_XPM – Load a XPM bitmap file.
  • wx.BITMAP_TYPE_ICO – Load a Windows icon file (ICO).
  • wx.BITMAP_TYPE_CUR – Load a Windows cursor file (CUR).
  • wx.BITMAP_TYPE_ANI – Load a Windows animated cursor file (ANI).
  • wx.BITMAP_TYPE_ANY – Will try to autodetect the format.

读取 SVG 则需要使用 wxPython 提供的一个专门的 SVG 读取类 wx.svg.SVGimage,它是继承 wx.svg.SVGimageBase

在这里插入图片描述

methodinstruction
CreateFromBytesLoads an SVG image from a bytes object.
CreateFromFileLoads an SVG image from a file.
RasterizeRenders the SVG image to a bytes object as a series of RGBA values.
RasterizeToBufferRenders the SVG image to an existing buffer as a series of RGBA values.
methodinstruction
ConvertToBitmapCreates a wx.Bitmap containing a rasterized version of the SVG image.
ConvertToScaledBitmapAutomatically scales the SVG image so it will fit in the given size,
RenderToGCDraw the collection of shapes and paths in the SVG image

参考代码

from wx.svg import SVGimage

def svg2bmp(svg_fliename, bmp_size):
    """SVG 转换为 bitmap

    Args:
        svg_fliename (str): SVG 文件路径
        bmp_size (wx.Sizer): bitmap 大小

    Returns:
        wx.Bitmap: 对应大小的位图
    """
    img = SVGimage.CreateFromFile(svg_fliename)
    bmp = img.ConvertToScaledBitmap(bmp_size)
    return bmp

一个简单的演示

# -*- encoding: utf-8 -*-
# Python 3.9.6 64bit
'''
@File        : read_svg.py
@Time        : 2022/01/06 14:53
@Author      : Wreng
@Description : 使用 wxpython 读取 SVG 简单演示
@Other       : version - Python 3.9.6 64bit, wxPython 4.1.1
'''

import wx
from wx.svg import SVGimage

class SVGRendderPanel(wx.Panel):

    def __init__(self, parent, bmp_size, *args, **kw):
        super().__init__(parent, *args, **kw)
        
        self.bmp_size = wx.Size(*bmp_size)
        self.statbmp = wx.StaticBitmap(self, bitmap=wx.Bitmap(*self.bmp_size))
        label = '{}x{}'.format(self.bmp_size.width, self.bmp_size.height)

        sbox = wx.StaticBoxSizer(wx.VERTICAL, self, label)
        sbox.Add(self.statbmp)

        self.SetSizer(sbox)

    def UpdateSVG(self, svg_filename):
        img = SVGimage.CreateFromFile(svg_filename)
        bmp = img.ConvertToScaledBitmap(self.bmp_size, self)
        self.statbmp.SetBitmap(bmp)

class TestFrame(wx.Frame):

    def __init__(self, *args, **kw):
        super().__init__(*args, **kw)

        self.svg_name = ".\\vscode-icon\\default_folder_opened.svg"

        self.SetBackgroundColour('white')
        self.SetTitle(self.svg_name.split('\\')[-1])

        sbox = wx.BoxSizer(wx.HORIZONTAL)
        
        for d in [32, 64, 128]:
            sbd = SVGRendderPanel(self, (d,d))
            sbd.UpdateSVG(self.svg_name)
            sbox.Add(sbd, 0, wx.ALL, 10)
        
        self.SetSizer(sbox)

if __name__ == '__main__':

    app = wx.App()
    frm = TestFrame(None)
    frm.Show()
    app.MainLoop()

运行结果:

在这里插入图片描述

图标来自 vscode-icons,可点此下载


相关参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wreng我是002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值