📜  pyqt5 图像更改大小 - Python (1)

📅  最后修改于: 2023-12-03 15:18:50.463000             🧑  作者: Mango

PyQt5 图像更改大小 - Python

在本教程中,我们将学习如何使用 PyQt5 库更改图像的大小。我们将介绍如何使用 PyQt5 的 QPixmap 和 QImage 类,以及如何将图像调整大小并将其保存为新文件。

准备工作

在开始之前,请确保您已经安装好了 PyQt5 库。如果您还没有安装,您可以通过使用以下命令在您的终端中安装它:

pip install pyqt5
步骤1 - 导入 PyQT5 和其他必要的模块

首先,我们需要导入必要的模块。我们将使用 PyQt5 和 QFileDialog 模块。

import sys
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QFileDialog
步骤2 - 创建用户界面

现在,我们需要创建一个基本的用户界面来显示图像。我们将创建一个 QLabel 控件来显示图像,并使用 QVBoxLayout 进行布局。

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQt5 Image Resizer")
        self.setGeometry(100, 100, 400, 300)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.label = QLabel()
        self.layout.addWidget(self.label)
步骤3 - 加载图像

我们现在需要一个函数来加载图像。该函数将弹出一个文件对话框,让用户选择要加载的图像文件。然后,它将使用 QPixmap 类加载图像文件并在 QLabel 控件中显示它。

    def load_image(self):
        file_name, _ = QFileDialog.getOpenFileName(self, "Open Image", "", "Image Files (*.png *.jpg *.bmp)")

        if file_name:
            image = QPixmap(file_name)
            self.label.setPixmap(image)
步骤4 - 更改图像大小

现在我们需要一个函数来更改图像的大小。我们将使用 QImage 来更改图像的大小,并在用户选择新大小后显示新图像。

    def resize_image(self):
        # 获取图像
        pixmap = self.label.pixmap()

        # 获取图像的宽度和高度
        width = pixmap.width()
        height = pixmap.height()

        # 弹出对话框获取新的宽度和高度
        new_width, ok1 = QInputDialog.getInt(self, "Image Width", "Enter new width:", width)
        new_height, ok2 = QInputDialog.getInt(self, "Image Height", "Enter new height:", height)

        # 创建新的 QImage 对象,并调整其大小
        image = pixmap.toImage()
        image = image.scaled(new_width, new_height)

        # 将新图像显示在标签中
        self.label.setPixmap(QPixmap.fromImage(image))
步骤5 - 保存新图像

最后,我们需要一个函数来保存新图像。该函数将弹出一个文件对话框,让用户选择要保存新图像的文件名和格式。然后,它将使用 QImage 类将图像保存为新文件。

    def save_image(self):
        # 获取要保存的文件名和格式
        file_name, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "Image Files (*.png *.jpg *.bmp)")

        # 获取当前显示的图像
        pixmap = self.label.pixmap()

        # 创建新的 QImage 对象并从 pixmap 中提取图像
        image = QImage(pixmap.toImage())

        # 保存图像
        image.save(file_name)
步骤6 - 添加按钮和信号

最后一步是添加按钮并将其连接到我们的函数。我们将添加三个按钮,分别用于加载图像、调整图像大小并保存图像。

        # 添加按钮
        load_button = QPushButton("Load Image")
        load_button.clicked.connect(self.load_image)
        self.layout.addWidget(load_button)

        resize_button = QPushButton("Resize Image")
        resize_button.clicked.connect(self.resize_image)
        self.layout.addWidget(resize_button)

        save_button = QPushButton("Save Image")
        save_button.clicked.connect(self.save_image)
        self.layout.addWidget(save_button)
完整的代码
import sys
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QFileDialog, QInputDialog

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQt5 Image Resizer")
        self.setGeometry(100, 100, 400, 300)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.label = QLabel()
        self.layout.addWidget(self.label)

        load_button = QPushButton("Load Image")
        load_button.clicked.connect(self.load_image)
        self.layout.addWidget(load_button)

        resize_button = QPushButton("Resize Image")
        resize_button.clicked.connect(self.resize_image)
        self.layout.addWidget(resize_button)

        save_button = QPushButton("Save Image")
        save_button.clicked.connect(self.save_image)
        self.layout.addWidget(save_button)

    def load_image(self):
        file_name, _ = QFileDialog.getOpenFileName(self, "Open Image", "", "Image Files (*.png *.jpg *.bmp)")

        if file_name:
            image = QPixmap(file_name)
            self.label.setPixmap(image)

    def resize_image(self):
        # 获取图像
        pixmap = self.label.pixmap()

        # 获取图像的宽度和高度
        width = pixmap.width()
        height = pixmap.height()

        # 弹出对话框获取新的宽度和高度
        new_width, ok1 = QInputDialog.getInt(self, "Image Width", "Enter new width:", width)
        new_height, ok2 = QInputDialog.getInt(self, "Image Height", "Enter new height:", height)

        # 创建新的 QImage 对象,并调整其大小
        image = pixmap.toImage()
        image = image.scaled(new_width, new_height)

        # 将新图像显示在标签中
        self.label.setPixmap(QPixmap.fromImage(image))

    def save_image(self):
        # 获取要保存的文件名和格式
        file_name, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "Image Files (*.png *.jpg *.bmp)")

        # 获取当前显示的图像
        pixmap = self.label.pixmap()

        # 创建新的 QImage 对象并从 pixmap 中提取图像
        image = QImage(pixmap.toImage())

        # 保存图像
        image.save(file_name)

app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())

现在,您应该已经掌握了如何使用 PyQt5 将图像大小更改为任何大小并保存为新文件的方法。