PyQt實現圖片的縮放和旋轉

圖片的縮放和旋轉是圖片處理的常用功能,本實例通過QMatrix實現圖片的縮放和旋轉:

具體代碼實現如下:

[python] view plain copy
  1. # -*- coding: utf-8 -*-  
  2.   
  3. from PyQt4.QtGui import *  
  4. from PyQt4.QtCore import *  
  5. import sys  
  6.   
  7. QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))  
  8.   
  9. class MainWindow(QMainWindow):  
  10.     def __init__(self,parent=None):  
  11.         super(MainWindow,self).__init__(parent)  
  12.         f=QFont("ZYSong18030",12)  
  13.         self.setFont(f)  
  14.           
  15.         self.setWindowTitle("Image Processor")  
  16.         self.imageLabel=QLabel()  
  17.         self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)   
  18.         self.imageLabel.setScaledContents(True)  
  19.           
  20.         self.setCentralWidget(self.imageLabel)  
  21.         self.image=QImage()  
  22.         if self.image.load("image/cc.png"):  
  23.                     self.imageLabel.setPixmap(QPixmap.fromImage(self.image))  
  24.                     self.resize(self.image.width(),self.image.height())          
  25.           
  26.         self.createActions()  
  27.         self.createMenus()  
  28.         self.createToolBars()  
  29.           
  30.     def createActions(self):  
  31.         self.zoominAction=QAction(QIcon("image/zoomin.png"),self.tr("放大"),self)  
  32.         self.zoominAction.setShortcut("Ctrl+P")  
  33.         self.zoominAction.setStatusTip(self.tr("放大"))  
  34.         self.connect(self.zoominAction,SIGNAL("triggered()"),self.slotZoomin)  
  35.           
  36.         self.deflateAction=QAction(QIcon("image/deflate.png"),self.tr("縮小"),self)  
  37.         self.deflateAction.setShortcut("Ctrl+A")  
  38.         self.deflateAction.setStatusTip(self.tr("縮小"))  
  39.         self.connect(self.deflateAction,SIGNAL("triggered()"),self.slotDeflate)  
  40.           
  41.         self.circumgyrate=QAction(QIcon("image/circumgyrate.png"),self.tr("旋轉"),self)  
  42.         self.circumgyrate.setShortcut("Ctrl+B")  
  43.         self.circumgyrate.setStatusTip(self.tr("旋轉"))  
  44.         self.connect(self.circumgyrate,SIGNAL("triggered()"),self.slotCircumgyrate)  
  45.           
  46.     def createMenus(self):  
  47.         PrintMenu=self.menuBar().addMenu(self.tr("縮放"))  
  48.         PrintMenu.addAction(self.zoominAction)  
  49.         PrintMenu.addAction(self.deflateAction)  
  50.         circumgyrateMenu=self.menuBar().addMenu(self.tr("旋轉"))  
  51.         circumgyrateMenu.addAction(self.circumgyrate)  
  52.           
  53.     def createToolBars(self):  
  54.         fileToolBar=self.addToolBar("Print")  
  55.         fileToolBar.addAction(self.zoominAction)  
  56.         fileToolBar.addAction(self.deflateAction)  
  57.         fileToolBar.addAction(self.circumgyrate)  
  58.       
  59.     def slotZoomin(self):  
  60.         if self.image.isNull():  
  61.             return  
  62.         martix = QMatrix()  
  63.         martix.scale(2,2)  
  64.         self.image=self.image.transformed(martix);  
  65.         self.imageLabel.setPixmap(QPixmap.fromImage(self.image))  
  66.         self.resize(self.image.width(),self.image.height())   
  67.       
  68.     def slotDeflate(self):  
  69.         if self.image.isNull():  
  70.             return  
  71.         martix = QMatrix()  
  72.         martix.scale(0.5,0.5)  
  73.         self.image=self.image.transformed(martix);  
  74.         self.imageLabel.setPixmap(QPixmap.fromImage(self.image))  
  75.         self.resize(self.image.width(),self.image.height())   
  76.       
  77.     def slotCircumgyrate(self):  
  78.         if self.image.isNull():  
  79.             return  
  80.         martix = QMatrix()  
  81.         martix.rotate(90)  
  82.         self.image=self.image.transformed(martix);  
  83.         self.imageLabel.setPixmap(QPixmap.fromImage(self.image))  
  84.         self.resize(self.image.width(),self.image.height())   
  85.                   
  86. app=QApplication(sys.argv)  
  87. window=MainWindow()  
  88. window.show()  
  89. app.exec_()  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章