4

I would like to use ImageQT so I can do image manipulation with the Python Image Library (PIL) and render the result using Qt4. I have a short test routine that reads the using PIL.Image.open, converts it using ImageQT and opens a dialog using QT. If I just use Qt to read the image, it works. What am I missing?

#!/usr/bin/python3.3
import sys
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QImage

app = QtGui.QApplication(sys.argv)
# added initialization after first suggestion below
QtGui.QImageReader.supportedImageFormats()

im = Image.open('test.gif')
image = ImageQt(im)
pixmap = QtGui.QPixmap(image)
# pixmap = QtGui.QPixmap('test.gif')

widget = QtGui.QWidget()
hbox = QtGui.QHBoxLayout(widget)
lbl = QtGui.QLabel(widget)
lbl.setPixmap(pixmap)
hbox.addWidget(lbl)
widget.setLayout(hbox)
widget.show()        
sys.exit(app.exec_())

test.gif
(source: sjs at www.sonic.net)

Note: added additional QtGui initialization after first suggestion. result is still same.

ekhumoro
  • 115,249
  • 20
  • 229
  • 336
steven smith
  • 1,519
  • 15
  • 31

3 Answers3

7

The problem with the example is that it is attempting to convert a QImage to a QPixmap by passing it directly to the QPixmap constructor, which isn't supported.

Instead, you need to do this:

im = Image.open('test.gif')
image = ImageQt(im)
pixmap = QtGui.QPixmap.fromImage(image)
ekhumoro
  • 115,249
  • 20
  • 229
  • 336
1

To make it work on win + unix the following is sugested:

PilImage = Image.open('kitten.jpg')
QtImage1 = ImageQt.ImageQt(PilImage)
QtImage2 = QtGui.QImage(QtImage1)
pixmap = QtGui.QPixmap.fromImage(QtImage2)
label = QtGui.QLabel('', self)
label.setPixmap(pixmap)

Source: http://skilldrick.co.uk/2010/03/pyqt-pil-and-windows/

Filippe
  • 31
  • 2
0

I don't see you initializing an QtGui.QApplication, this is needed to load the extra formats that Qt supports. I'm not sure if this is neccessary considering you use PIL. But you could try it. See the bottom answer in this post: Possible Solution

Community
  • 1
  • 1
John
  • 723
  • 1
  • 5
  • 12
  • Thank you John. The result is the same after addingI initialization code suggested in 'possible solution' link you gave. Result is the same but I need to look at this some more. I added – steven smith Sep 19 '13 at 16:23
  • Thank you @John. The result is the same after adding initialization code suggested in 'possible solution' link you gave. Result is the same but I need to look at this some more. I added a print of the image and get an error saying "OverflowError: can't convert negative value to unsigned int". I also can't print its type or str(). – steven smith Sep 19 '13 at 16:31