如何在 PyQt5 matplotlib 应用程序中存储当前缩放的图像

How to store the current zoomed image in PyQt5 matplotlib application

我正在使用这个应用程序:OrthoViewLite

我在整个代码中放置了 print 命令,以便在缩放图像时查看代码的哪一部分与缩放按钮相关。它没有帮助。此外,当我按下“存储当前(缩放)图像按钮”时,我没有看到任何编号的 print 命令发生任何变化(我这样使用它们:print("1")print("2")、。 .. print("250")).

所以,我的问题是:存储当前缩放图像的代码部分是什么?

保存当前图像的代码是 matplotlib 的一部分NavigationToolbar2QT class. The toolbar buttons for this class are defined in the toolitems attribute which is inherited from the NavigationToolbar2 class. These definitions create a "Save" button which calls the toolbar's save_figure() method when clicked. This method generates a default filepath for the file-dialog, and calls matplotlib.pyplot.savefig,用于将图像保存到磁盘。

因此,要创建您自己的 image-save 按钮,您真正需要的只是 savefig。因此,OrthoViewLite 代码可以很容易地进行调整,如下所示:

class OrthoView(QMainWindow):
    def __init__(self, parent=None):
        ...
        self.tb.addAction(go_home_btn)
        
        # add a new tool bar button
        my_save_btn = QAction("My Save", self, triggered=self.mySave)
        my_save_btn.setIcon(QIcon.fromTheme("document-save"))
        self.tb.addAction(my_save_btn)
        ...
    
    # custom slot to save the current image
    def mySave(self):
        filepath = os.path.join(
            QStandardPaths.writableLocation(QStandardPaths.TempLocation),
            'zoomed_photo.jpg')
        print(f'Saving: {filepath}')
        try:
            self.plotCanvas.figure.savefig(filepath)
        except Exception as exception:
            QMessageBox.warning(
                self, 'Save Error', str(exception), QMessageBox.Ok)