Pythonで画像を回転
Pythonで画像を回転させます。もちろんPyQtを使ってるよ。
まず、QTransformを生成します。
そこからtranslate()とrotate()とを呼び出してsetTransform()でこれらの画像処理を反映させます。そして、QPainterで回転した画像を表示、描画させています。
rotateの値は負だと左回転し、正の値だと右回転(時計回り)します。
注意点としては、原点が画像の中心ではなく、(0,0)で回転していることです。
なので、translate()で座標をずらしてから回転させています。
以下はソース。
オリジナルの画像
実行されたアプリケーション
まず、QTransformを生成します。
そこからtranslate()とrotate()とを呼び出してsetTransform()でこれらの画像処理を反映させます。そして、QPainterで回転した画像を表示、描画させています。
rotateの値は負だと左回転し、正の値だと右回転(時計回り)します。
注意点としては、原点が画像の中心ではなく、(0,0)で回転していることです。
なので、translate()で座標をずらしてから回転させています。
以下はソース。
import sys from PyQt4 import QtGui, QtCore, uic from Foo import Ui_MainWindow class Sample(QtGui.QMainWindow): def __init__(self, parent = None): super(Sample, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.activateWindow() def paintEvent(self,event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing, True) painter.setPen(QtGui.QColor('#FFFFFF')) painter.setBrush(QtCore.Qt.white) painter.drawRect(event.rect()) image = QtGui.QImage('sample02.jpg') x = (self.width() - image.width()) / 2 y = (self.height() - image.height()) / 2 tf = QtGui.QTransform() tf.translate(image.width(), image.height()) tf.rotate(180) painter.setTransform(tf) painter.drawImage(x, y, image) painter.end() if __name__ == '__main__': app = QtGui.QApplication(sys.argv) sample = Sample() sample.show() sys.exit(app.exec_())
オリジナルの画像
実行されたアプリケーション