如何将PIL Image转换为pixbuf?我试着改变了很多例子,但是没有解决方案
import array
from gi.repository import GdkPixbuf
def image2pixbuf(self,im):
arr = array.array('B', im.tostring())
height, width = im.size
return GdkPixbuf.Pixbuf.new_from_data(arr, GdkPixbuf.Colorspace.RGB,
True, 8, width, height, width * 4)错误
TypeError: new_from_data () takes Exactly 9 arguments (7 given)我使用Pygobject https://live.gnome.org/PyGObject
发布于 2012-05-06 15:51:50
我在使用Gtk3时遇到了同样的问题。GdkPixbuf.PixbufDestroyNotify - NotImplementedError - python gtk3
似乎有一个bug。我已经上报了。https://bugzilla.gnome.org/show_bug.cgi?id=674691
Gtk3有这个bug。但您仍然可以在Gtk2中完成此操作。
发布于 2012-05-11 15:31:11
这就是我在PyGtk中如何做的,也许这仍然有效(我在pygi-convert之后复制代码):
import Image
import StringIO
from gi.repository import GdkPixbuf
def thumbnail_image(self, image):
"""Creates a thumbnail GdkPixbuf of given image"""
# Create thumbnail
img = Image.open(image)
img.thumbnail((200, 300), Image.ANTIALIAS)
# Convert to GdkPixbuf
if img.mode != 'RGB': # Fix IOError: cannot write mode P as PPM
img = img.convert('RGB')
buff = StringIO.StringIO()
img.save(buff, 'ppm')
contents = buff.getvalue()
buff.close()
loader = GdkPixbuf.PixbufLoader('pnm')
loader.write(contents, len(contents))
pixbuf = loader.get_pixbuf()
loader.close()
return pixbuf亲切的问候
编辑:好的,这似乎起作用了……我只是非常讨厌PyGObject可怜的C移植接口(直到现在……)。
代码(test.py):
import Image
import StringIO
from gi.repository import Gtk, GdkPixbuf
from os.path import abspath, dirname, join
WHERE_AM_I = abspath(dirname(__file__))
class MyApp(object):
def __init__(self):
# Build GUI
self.builder = Gtk.Builder()
self.glade_file = join(WHERE_AM_I, 'test.glade')
self.builder.add_from_file(self.glade_file)
# Get objects
go = self.builder.get_object
self.window = go('window')
self.image = go('image')
# Load image
path = join(WHERE_AM_I, 'logo.png')
thumbnail = self.thumbnail_image(path)
self.image.set_from_pixbuf(thumbnail)
# Connect signals
self.builder.connect_signals(self)
# Everything is ready
self.window.show()
def main_quit(self, widget):
Gtk.main_quit()
def thumbnail_image(self, image):
"""Creates a thumbnail GdkPixbuf of given image"""
# Create thumbnail
img = Image.open(image)
img.thumbnail((200, 300), Image.ANTIALIAS)
# Convert to GdkPixbuf
if img.mode != 'RGB': # Fix IOError: cannot write mode P as PPM
img = img.convert('RGB')
buff = StringIO.StringIO()
img.save(buff, 'ppm')
contents = buff.getvalue()
buff.close()
loader = GdkPixbuf.PixbufLoader.new_with_type('pnm')
loader.write(contents)
pixbuf = loader.get_pixbuf()
loader.close()
return pixbuf
if __name__ == '__main__':
gui = MyApp()
Gtk.main()Glade文件(test.glade):
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkWindow" id="window">
<property name="can_focus">False</property>
<property name="window_position">center-always</property>
<property name="default_width">300</property>
<property name="default_height">200</property>
<signal name="destroy" handler="main_quit" swapped="no"/>
<child>
<object class="GtkImage" id="image">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
</object>
</interface>它看起来像什么:

(欢迎对添加Alpha通道支持的改进)
亲切的问候
https://stackoverflow.com/questions/10341988
复制相似问题