python - 如何将编辑后的 QGraphicsScene 保存为图像文件
问题描述
我QGraphicsPixmapItem
从加载的图像(6000x4000 像素)中添加到QGraphicsScene
. 我添加了几个实心正方形并addRect
在场景中使用。
如何将编辑后的高分辨率图像保存为全尺寸图像
这是我的代码
class PhotoViewer(QGraphicsView):
def __init__(self, parent):
self._zoom = 0
self._items = []
self._scene = QGraphicsScene(self)
self._photo = QGraphicsPixmapItem()
self._scene.addItem(self._photo)
self.setScene(self._scene)
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setBackgroundBrush(QBrush(QColor(30, 30, 30)))
self.setFrameShape(QFrame.NoFrame)
# some other actions
def fitInView(self, scale=True):
rect = QRectF(self._photo.pixmap().rect())
if not rect.isNull():
self.setSceneRect(rect)
# custom fit in view and scaling
def setPhoto(self, pixmap=None):
self._zoom = 0
if pixmap and not pixmap.isNull():
self._empty = False
self._photo.setPixmap(pixmap)
self.fitInView()
def add_a_Rectangle(self):
self._added = self._scene.addRect(rect,pen)
# custom other code
def save_image(self):
#====method that I need to implement=======#
pass
class MainWindow(QMainWindow):
def __init__(self):
self.viewer_edit = PhotoViewer(self)
def save_img(self):
self.viewer_edit.save_img()
pass
我尝试了两种方法,但它不起作用
首先
img = QPixmap(self._scene.grab())
painter = QPainter(img)
painter.setRenderHint(QPainter.Antialiasing)
self._scene.render(painter)
painter.end()
img.save('D:\\test.png')
结果
加载图像的大小为 3000x3000 像素,但结果图像的大小为 1881x768 像素。
第二
我曾经参考How to render a part of QGraphicsScene and save It as image file PyQt5 and eyllanesc's comment。
w = self._photo.boundingRect().width()
h = self._photo.boundingRect().height()
image = QImage(int(w),int(h), QImage.Format_ARGB32_Premultiplied)
painter = QPainter(image)
self._scene.render(painter,QRectF(0, 0,w,h), self._photo.boundingRect())
painter.end()
image.save('D:\\test2.png',quality=100)
最后我解决了问题
解决方案
推荐阅读
- qt - QWebEngineView - 处理媒体会话 API
- python - 我的 Win 10 python 安装不会创建颜色。ANSI 字符未解释,Colorama,所有其他模块都可以安装,但不要“着色”。
- r - 使用插件将 RevealJS 演示文稿发布到 RStudio Connect?
- eloquent - Laravel 更新事件(观察者):SQLSTATE[22001] 错误
- python - Numpy:列表中所有向量的点积
- r - 使用汇总统计数据忽略 NA 值
- python-3.x - 检查用户是否是机器人的问题
- javascript - 每个边缘的 d3.js 自定义链接距离
- php - PHP-Mailform 在 Godaddy 上不起作用,根据 Godaddy 的规范更新设置不起作用
- salesforce-commerce-cloud - SFCC进口目录