ビューに画像を読み込む

2017/01/26

fp = 'image.png'
pixmap = QtGui.QPixmap(fp)
item = QtGui.QGraphicsPixmapItem(pixmap)
view = QtGui.QGraphicsView()
view.addItem(item)


py2exeでexeファイル化した際、Jpeg画像を読み込まないエラーが発生。
PySideのプラグインのDLLファイルを実行ファイルと同所に置けば良いとの情報は見つけたけど、うまく行かないので、PILで画像変換させた。

buf = cStringIO.StringIO()
im = Image.open(fp)
im.save(buf, 'BMP')
pixmap.loadFromData(buf.getvalue(),'BMP')


変換が必要な形式のとき変換して表示するサンプル

# -*- coding: utf-8 -*-

import sys,os
import cStringIO
from PySide import QtCore,QtGui
from PIL import Image

def load_view():
    fp = 'test.jpg'
    view =  QtGui.QGraphicsView()
    scene = QtGui.QGraphicsScene(view)
    pixmap = QtGui.QPixmap()

    _,ext = os.path.splitext(fp)
    if ext.lower() in ['.png','.bmp']:
        pixmap.load(fp)
    else:
        buf = cStringIO.StringIO()
        im = Image.open(fp)
        im.save(buf, 'BMP')
        pixmap.loadFromData(buf.getvalue(),'BMP')

    if pixmap.isNull():
        print('ERROR setImage load pixmap fp='+fp.decode('cp932'))
        exit()

    item = QtGui.QGraphicsPixmapItem(pixmap)
    item.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
    scene.addItem(item)
    view.setScene(scene)

    return view

def main():
    app = QtGui.QApplication(sys.argv)
    view = load_view()
    view.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()


PIL.Image と PyQt4.QtGui.QImageの相互変換
http://doloopwhile.hatenablog.com/entry/20100305/1267782841

PyQT4 issue with jpeg when compiled
http://stackoverflow.com/questions/2206406/pyqt4-issue-with-jpeg-when-compiled