#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2016/11/26 21:49:40 +0900> u""" Pillow(PIL)のImageQtについて動作確認. PIL の ImageQt を使うと、 PIL の Image から、PySide の QImage に変換できる。はず。 実際に動作するのか確認してみる。 PySideとPyQt4の両方をインストールしてある環境では、 ImageQt が PySide より PyQt4 を優先して使ってしまう。 importのあたりに一行入れることで問題を回避できる模様。 動作確認 : Windows10 x64 + Python 2.7.12 + PySide 1.2.4 + Pillow 3.4.2 """ use_pyside = True import sys if use_pyside: # use PySide # import PySide # sys.modules['PyQt4'] = PySide # ここでPyQt4を使わないようにしているはず…なのだが… from PySide import QtGui from PySide import QtCore sys.modules['PyQt4.QtGui'] = QtGui sys.modules['PyQt4.QtCore'] = QtCore from PySide.QtCore import * # NOQA from PySide.QtGui import * # NOQA else: # use PyQt4 from PyQt4.QtCore import * # NOQA from PyQt4.QtGui import * # NOQA from PIL import Image from PIL import ImageQt class MyWidget(QWidget): def __init__(self, *argv, **keywords): super(MyWidget, self).__init__(*argv, **keywords) layout = QGridLayout() lst = [ "./tmp_grayscale.png", "./tmp_indexed.png", "./tmp_rgb.png", "./tmp_rgba.png" ] for i, fpath in enumerate(lst): im = Image.open(fpath) old_im_mode = im.mode if im.mode != "RGBA": im = im.convert("RGBA") print("im.mode %s -> %s" % (old_im_mode, im.mode)) qim1 = ImageQt.ImageQt(im) qim2 = QImage(qim1) pm = QPixmap.fromImage(qim2) lbl = QLabel(old_im_mode, self) lbl.setPixmap(pm) layout.addWidget(lbl, i / 2, i % 2) self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) w = MyWidget() w.show() sys.exit(app.exec_())