| 23 | |
| 24 | |
| 25 | class Window(QWidget): |
| 26 | |
| 27 | def __init__(self, *args, **kwargs): |
| 28 | super(Window, self).__init__(*args, **kwargs) |
| 29 | layout = QVBoxLayout(self) |
| 30 | self.imageLabel = QLabel(self) |
| 31 | self.imageLabel.setAlignment(Qt.AlignCenter) |
| 32 | layout.addWidget(self.imageLabel) |
| 33 | clayout = QHBoxLayout() |
| 34 | layout.addItem(clayout) |
| 35 | clayout.addItem(QSpacerItem( |
| 36 | 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)) |
| 37 | clayout.addWidget(QPushButton('水平翻转', self, clicked=self.doHorFilp)) |
| 38 | clayout.addWidget(QPushButton('垂直翻转', self, clicked=self.doVerFilp)) |
| 39 | clayout.addWidget(QPushButton( |
| 40 | '顺时针45度', self, clicked=self.doClockwise)) |
| 41 | clayout.addWidget(QPushButton( |
| 42 | '逆时针45度', self, clicked=self.doAnticlockwise)) |
| 43 | clayout.addItem(QSpacerItem( |
| 44 | 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)) |
| 45 | |
| 46 | # 原始图片 |
| 47 | self.srcImage = QImage('Data/fg.png') |
| 48 | self.imageLabel.setPixmap(QPixmap.fromImage(self.srcImage)) |
| 49 | |
| 50 | def doHorFilp(self): |
| 51 | # 水平翻转 |
| 52 | self.srcImage = self.srcImage.mirrored(True, False) |
| 53 | self.imageLabel.setPixmap(QPixmap.fromImage(self.srcImage)) |
| 54 | |
| 55 | def doVerFilp(self): |
| 56 | # 垂直翻转 |
| 57 | self.srcImage = self.srcImage.mirrored(False, True) |
| 58 | self.imageLabel.setPixmap(QPixmap.fromImage(self.srcImage)) |
| 59 | |
| 60 | def doClockwise(self): |
| 61 | # 顺时针45度 |
| 62 | image = QImage(self.srcImage.size(), |
| 63 | QImage.Format_ARGB32_Premultiplied) |
| 64 | painter = QPainter() |
| 65 | painter.begin(image) |
| 66 | # 以图片中心为原点 |
| 67 | hw = self.srcImage.width() / 2 |
| 68 | hh = self.srcImage.height() / 2 |
| 69 | painter.translate(hw, hh) |
| 70 | painter.rotate(45) # 旋转45度 |
| 71 | painter.drawImage(-hw, -hh, self.srcImage) # 把图片绘制上去 |
| 72 | painter.end() |
| 73 | self.srcImage = image # 替换 |
| 74 | self.imageLabel.setPixmap(QPixmap.fromImage(self.srcImage)) |
| 75 | |
| 76 | # # 下面这个旋转方法针对90度的倍数,否则图片会变大 |
| 77 | # trans = QTransform() |
| 78 | # trans.rotate(90) |
| 79 | # self.srcImage = self.srcImage.transformed( |
| 80 | # trans, Qt.SmoothTransformation) |
| 81 | # self.imageLabel.setPixmap(QPixmap.fromImage(self.srcImage)) |
| 82 | |