#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2016/11/27 04:58:21 +0900> u""" QImageを使って画像フォーマットを確認する. L(グレースケール)、P(インデックスカラー)、RGB、RGBAを判断する。 動作確認 : Windows10 x64 + Python 2.7.12 + PySide 1.2.4 + Pillow 3.4.2 """ import sys from PySide.QtCore import * # NOQA from PySide.QtGui import * # NOQA class MyWidget(QWidget): u"""メインウインドウ相当.""" def __init__(self, *argv, **keywords): """init.""" super(MyWidget, self).__init__(*argv, **keywords) l = QVBoxLayout() tb = QTextEdit(self) l.addWidget(tb) self.setLayout(l) lst = [ "./tmp_1bit.png", "./tmp_grayscale.png", "./tmp_indexed.png", "./tmp_rgb.png", "./tmp_rgba.png" ] for i, fpath in enumerate(lst): qim = QImage(fpath) ret = self.get_image_mode(qim) tb.append("%s is %s" % (fpath, ret)) def get_image_mode(self, qim): u"""画像モードを調べて返す. PIL Image.mode と同様、1,L,P,RGB,RGBAで返す。 """ ret = "" fmt = qim.format() if fmt == QImage.Format_Mono: ret = "1" elif fmt == QImage.Format_MonoLSB: ret = "1" elif fmt == QImage.Format_Indexed8: ret = "L" if qim.allGray() else "P" elif fmt == QImage.Format_RGB32: ret = "RGB" elif fmt == QImage.Format_ARGB32: ret = "RGBA" else: ret = "UNKNOWN" print(f) del qim return ret if __name__ == '__main__': app = QApplication(sys.argv) w = MyWidget() w.show() sys.exit(app.exec_())