python GTK3图片来自PIL jpg格式
python GTK3 Image from PIL jpg format
我正在尝试以 Gtk.Image() 从缓冲区(从 Oracle 数据库获取 blob)打开图像 (jpg) 并将其添加到 Gtk window,但出现错误"Expected Gtk.Widget, but got PIL.JpegImagePlugin.JpegImageFile"。我可以用 show() 显示图像,我可以从光盘上的路径 window.add jpeg 文件,然后显示 window,但是当我尝试从缓冲区添加 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") 的结果添加到新的window 但不知道如何操作:
newwindow.add(dt)
或任何具有类似效果的东西。如何以最简单的方式做到这一点?
对我有用的是-
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()
我正在尝试以 Gtk.Image() 从缓冲区(从 Oracle 数据库获取 blob)打开图像 (jpg) 并将其添加到 Gtk window,但出现错误"Expected Gtk.Widget, but got PIL.JpegImagePlugin.JpegImageFile"。我可以用 show() 显示图像,我可以从光盘上的路径 window.add jpeg 文件,然后显示 window,但是当我尝试从缓冲区添加 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") 的结果添加到新的window 但不知道如何操作:
newwindow.add(dt)
或任何具有类似效果的东西。如何以最简单的方式做到这一点?
对我有用的是-
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()