📅  最后修改于: 2023-12-03 15:18:50.463000             🧑  作者: Mango
在本教程中,我们将学习如何使用 PyQt5 库更改图像的大小。我们将介绍如何使用 PyQt5 的 QPixmap 和 QImage 类,以及如何将图像调整大小并将其保存为新文件。
在开始之前,请确保您已经安装好了 PyQt5 库。如果您还没有安装,您可以通过使用以下命令在您的终端中安装它:
pip install pyqt5
首先,我们需要导入必要的模块。我们将使用 PyQt5 和 QFileDialog 模块。
import sys
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QFileDialog
现在,我们需要创建一个基本的用户界面来显示图像。我们将创建一个 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)
我们现在需要一个函数来加载图像。该函数将弹出一个文件对话框,让用户选择要加载的图像文件。然后,它将使用 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)
现在我们需要一个函数来更改图像的大小。我们将使用 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))
最后,我们需要一个函数来保存新图像。该函数将弹出一个文件对话框,让用户选择要保存新图像的文件名和格式。然后,它将使用 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)
最后一步是添加按钮并将其连接到我们的函数。我们将添加三个按钮,分别用于加载图像、调整图像大小并保存图像。
# 添加按钮
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 将图像大小更改为任何大小并保存为新文件的方法。