python - python GTK3图像来自PIL jpg格式
问题描述
我试图从缓冲区打开图像(jpg)(从 Oracle 数据库中获取 blob)作为 Gtk.Image() 并将其添加到 Gtk 窗口,但我收到错误“预期 Gtk.Widget,但得到 PIL.JpegImagePlugin .JpegImage 文件”。我可以用 show() 显示图像,我可以 window.add 从光盘上的路径添加 jpeg 文件,然后显示窗口,但是当我尝试从缓冲区添加 jpg 时出现错误。这是我制作的:
my_source=Here_I_get_BLOB_img_from_database()
newimage=Gtk.Image()
newimage=my_source.read()
image=io.BytesIO(newimage)
dt=Image.open(image)
newwindow = Gtk.Window(modal=True)
在这一点上,实际上我在缓冲区中有 jpg,我可以这样做:
dt.show() # to display the image in system imageviewer
或将 dt 保存为 jpg,或将 image.set_from_file("path with jpg extension") 的结果添加到 newwindow 但不知道如何执行此操作:
newwindow.add(dt)
或任何具有类似效果的东西。如何以最简单的方式做到这一点?
解决方案
对我有用的是-
从缓冲区加载 img 的 Gtk.Image 具有 Pixbuf 对象,例如可以从流中加载。所以:
from gi.repository import (...) GdkPixbuf, GLib, Gio
(...)
my_source=Here_I_get_BLOB_img_from_database()
newimage=my_source.read()
glib=GLib.Bytes.new(newimage)
stream = Gio.MemoryInputStream.new_from_bytes(glib)
pixbuf = GdkPixbuf.Pixbuf.new_from_stream(stream, None)
image=Gtk.Image().new_from_pixbuf(pixbuf)
my_window = Gtk.Window(modal=True, title="Image")
my_window.add(image)
image.show()
my_window.show()
推荐阅读
- c - GDI 中的缩放图层
- python - 如何自动更新matplotlib图并将其作为PNG保存到某个文件夹?
- macos - Mac 上的蓝牙状态历史记录
- javascript - 无法使用 Javascript 成功提交表单
- hyperledger-fabric - Hyperledger Fabric - 如果互联网不可用,合约实例化失败
- android - 接收方应用程序 - 处理意图过滤器 URI 的权限
- php - 如何根据提交的数据重定向到特定的 URL?
- python-3.x - 模块在没有明确指令的情况下重新加载和重置
- python - Python Jupyter Notebook 中不显示内联图
- github - 使用 GraphQL 突变删除 github 中的分支