我正在努力将二进制数据转换为gtk.gdk.pixbuf
。
这应该说明我的问题:
file = open("image.jpg", "rb")
//Ultimately this is going to come from a BLOB
binary = f.read()
//I created a pixbuf directly from the jpg
//and took the rowstride values &c. from that
pixbuf = gtk.gdk.pixbuf_new_from_data(
binary, gtk.gdk.COLORSPACE_RGB, False, 8 , 450, 640, 1352)
这失败了:
ValueError: data length (90825) is less then required by the other parameters (865280)
我目前的解决方法是将二进制数据写入文件,然后从该文件创建Pixbuf
。这只是感觉很hacky。我正在从数据库中读取二进制数据,所以我真的需要一个可以直接从缓冲区创建pixbuf的解决方案。
我不明白为什么我只是从数据库中读取BLOB
并将其写入文件 - 然后将文件作为pixbuf加载,但很难从缓冲区直接进行,这很容易!
我做错了什么?
答案 0 :(得分:5)
您正尝试使用方法made for RGB-data only处理jpg数据。
如果您想处理jpgs,请按照建议here使用此格式的加载程序:
file = open("image.jpg", "rb")
binary = file.read()
loader = gtk.gdk.PixbufLoader("jpeg")
loader.write(binary)
loader.close()
pixbuf = loader.get_pixbuf()
现在pixbuf
包含您需要的内容。您的解决方法used such a loader automatically。