主要的问题是,据我所能找到的,从base64编码的图像加载图像没有简单的/有文档记录的方法。使用下面的代码将图像编码到base64 (这样我就不需要将所有的图像都包含在源代码中,也不应该创建临时文件并在退出时删除它们)。我使用的图像格式是.png
,它在Gtk3+中得到支持。(在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
,但是它说不支持图像的格式。
发布于 2016-01-12 01:22:58
您的数据是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)
https://stackoverflow.com/questions/34720603
复制