2017-06-18 91 views
0

什么是gtk相当于PIL.Image tobytes()?python gtk相当于PIL.Image tobytes()

i = PIL.Image.open('image.png') 
data = i.tobytes() 

我试图让屏幕与GTK并将其转换为相同字节在前PIL:

import gtk, PIL.Image 

img_width = gtk.gdk.screen_width() 
img_height = gtk.gdk.screen_height() 
data = gtk.gdk.Pixbuf(
    gtk.gdk.COLORSPACE_RGB, 
    False, 
    8, 
    img_width, 
    img_height 
) 
data.get_from_drawable(
    gtk.gdk.get_default_root_window(), 
    gtk.gdk.colormap_get_system(), 
    0, 0, 0, 0, 
    img_width, 
    img_height 
) 
data = data.tobytes() #<-- here trying to get bytes 
+0

您是否知道您使用的是过时版本的gtk?当前版本是Gtk3,您可以通过'从gi.repository import Gtk'导入。 –

回答

0

您正在寻找pixbuf.get_pixels()

注意,有可能为返回的数据包含填充:

行的图像存储自上而下,并在每一行像素 存储由左到右。在一行的末尾可能会有填充。 由 gdk_pixbuf_get_rowstride()返回的pixbuf的“rowstride”值指示 行之间的字节数。

(来自here。)

可以使用串/字节操作删除此填充,或可替代地使用pixbuf.save_to_callback将图像保存在没有填充一个原始RGB格式。

+0

优秀!谢谢 – peter