从Gtk3+中的base64编码图像加载图像



主要问题是,根据我的发现,没有简单/有文档的方法从base64编码的图像加载图像我使用以下代码将图像编码为base64(这样我就不需要将所有图像都包含在源中,也不应该创建临时文件并在退出时删除它们)。我使用的图像格式是Gtk3+支持的.png。(来自GdkPixbuf.Pixbuf.get_formats(),结果中有['png']。我真的很困惑如何使用Gtk3+。

import base64
image_name = 'image.png'
image_loc = 'd:\Home\' + image_name
with open(image_loc, 'rb') as image_file:
encoded_string = base64.b64encode(image_file.read())
print(encoded_string)

我想使用输出,例如:

base64_data="""
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABsklEQVRYhe2XIVMCQRSAv2AwGAgEAuFmJBiMFmcMBH8AgUAgXHDMFww2gtFA
        IBicsRgNBgLBcS7yE4gEIsFgIBDO8Pa8x7FwB7cnxTfzyr637327b+/dLiTSBIbAHIgydAGMgAscyUOOpDZdAu2iyZsq4BcwAHpb9NE1xFAl
        P8s558klRFzzwQ5zejgsRxygVxBgbwiXAHtBuAaIIa7KBAgyACJgBlTKAqgBH8A0pWmIXKXYB2CbdFRM/xAA3qEBKipm8A9wCIAa8q/oUOJn
        6FTKAqgA10gZWkD9rwAugRfWm1IEfCKlKQ2ghdwrstp0vwyAuiX5HGnRMwtE1zVAfLPS6hubZ7HNgaorgFPkppxOEvcBG0AE3LoCuGZ1Zb7R
        hrGfqLGJ8h24ArhTcaYZvqHyDV0BtFWcGbLlHrJygCM1Nla+r5Cc0OcCAA3sNfaN3dtgDwDeSO5xzQIQthvRNoAlcA7yGFmowTFSmzz6jmwv
        rL6wYp0Yv7HFttKMusC3xSmP3qs4/ZxzJiTn41c85N032mEHQqQBHacWs+mFvTSQa8ldSxW4Qb7zEDntAabmWn4A0clKl9nNvDwAAAAASUVO
        RK5CYII
        """

并从base64渲染图像。

附带说明一下,在tkinter上,这很容易通过完成

tkinter.PhotoImage(data=base64_data)

然后在需要的地方显示图像。

回到Gtk3+,我没有找到从base64加载图像的方法。即使使用GdkPixbuf.Pixbuf.new_from_data,我也会得到一个破碎的图像。我也尝试过Gio.MemoryInputStream.new_from_bytes,但它说不支持图像的格式。

您的数据是base64编码的,为了让Gtk3+使用它,您必须首先对其进行解码:

import base64
raw_data = base64.b64decode(data)

那么你的GdkPixbuf.Pixbuf.new_from_data是对的:
(我不能测试,但我认为这可能有效)

import base64
raw_data = base64.b64decode(data)
image = GdkPixbuf.Pixbuf.new_from_data(raw_data)
image_show_2.set_from_pixbuf(image)

其他你可以做你展示:

import base64
raw_data = base64.b64decode(data)
byting = GLib.Bytes(raw_data)
inputing = Gio.MemoryInputStream.new_from_bytes(byting)
image = GdkPixbuf.Pixbuf.new_from_data(inputing)
image_show_2.set_from_pixbuf(image)

相关内容

  • 没有找到相关文章

最新更新