pyqt 手动裁剪图像
时间: 2023-12-05 20:05:48 浏览: 88
以下是使用PyQt5手动裁剪图像的Python代码示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGraphicsScene, QGraphicsView
from PyQt5.QtGui import QPixmap, QPainter, QPen, QGuiApplication
from PyQt5.QtCore import Qt, QPoint
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 加载图片
self.image = QPixmap('image.jpg')
# 创建标签并设置图片
self.label = QLabel(self)
self.label.setPixmap(self.image)
# 创建场景和视图
self.scene = QGraphicsScene(self)
self.view = QGraphicsView(self.scene, self)
self.view.setFixedSize(self.image.width(), self.image.height())
# 将标签添加到场景中
self.scene.addWidget(self.label)
# 设置窗口大小
self.setFixedSize(self.image.width(), self.image.height())
# 设置窗口标题
self.setWindowTitle('手动裁剪图像')
# 显示窗口
self.show()
def mousePressEvent(self, event):
# 获取鼠标点击的位置
self.start = event.pos()
def mouseReleaseEvent(self, event):
# 获取鼠标释放的位置
self.end = event.pos()
# 创建画笔
pen = QPen(Qt.red)
pen.setWidth(2)
# 在场景中绘制矩形
self.scene.addRect(self.start.x(), self.start.y(), self.end.x() - self.start.x(), self.end.y() - self.start.y(), pen)
# 裁剪图片
rect = self.label.mapFromScene(QRectF(self.start, self.end)).boundingRect().toRect()
cropped = self.image.copy(rect)
# 显示裁剪后的图片
self.label.setPixmap(cropped)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
```
运行上述代码后,会弹出一个窗口显示原始图片。在窗口中用鼠标拖动选择要裁剪的区域,松开鼠标后会在选定区域绘制一个红色矩形,并显示裁剪后的图片。可以重复此操作以裁剪多个区域。
阅读全文