使用Python半小时实现一个批量缩放图片的小软件

目标:

使用Python半小时实现一个批量缩放图片的小软件

在这个数字化时代,图片处理已经成为我们日常生活的一部分。无论是为社交媒体优化图像尺寸,还是为了满足工作需求,批量处理图片始终是一项繁琐但必要的任务。如果你曾想快速实现图片批量缩放功能,而又不想沉迷于复杂的图像处理软件,那么这篇教程正是为你准备的!

功能介绍

这个简单的Python应用程序可以让用户批量缩放图片。具体来说,它具备以下功能:

  1. 选择图片源目录:用户可以指定包含原始图片的文件夹。
  2. 选择目标目录:用户可以指定存放缩放后图片的文件夹。
  3. 设置图片尺寸:用户可以自定义缩放后的图片宽度和高度。
  4. 一键批量处理:用户点击“运行”按钮后,程序将处理整个文件夹中的所有图片,并将缩放后的图片保存到指定目录。
技术要点

要实现这样一个程序,我们将使用两个强大的Python库:PyQt5和Pillow。

  1. PyQt5:这是一个创建桌面应用程序的工具集。它提供了一系列的窗口控件(widgets),使得我们可以通过简单的拖放和一些编程就能创建专业的GUI(图形用户界面)。

  2. Pillow:这是一个图像处理库,用于打开、操作以及保存多种不同格式的图像文件。在本程序中,我们将用它来处理图片的缩放功能。

代码解析

我们的程序代码可以分为几个关键部分:

  1. 创建界面:我们使用PyQt5创建了一个基本的窗口,添加了按钮、文本框等控件,以实现目录选择和尺寸输入的功能。

  2. 选择目录:当用户点击选择目录的按钮时,会弹出一个对话框,让用户选择文件夹。

  3. 读取和处理图片:程序会读取源目录中的所有图片,使用Pillow库进行尺寸调整,然后保存到目标目录。

  4. 异常处理:程序包含基本的错误检查,确保用户输入了有效的目录和尺寸信息。

开始使用

要运行这个程序,你需要在你的机器上安装Python、PyQt5和Pillow。安装这些库非常简单,只需几行命令:

pip install PyQt5 pip install Pillow

一旦安装完成,你就可以复制上述代码,并在Python环境下运行它。程序界面将会出现,你可以开始使用这个便捷的批量图片缩放工具了。

源码如下:

import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel, QLineEdit, QFileDialog, QHBoxLayout
from PIL import Image

class ImageResizer(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("批量缩放图片v1.0")

        # 布局
        layout = QVBoxLayout()

        # 显示源目录
        h_layout = QHBoxLayout()
        self.sourceDirLabel = QLabel("源目录: 未选择")
        h_layout.addWidget(self.sourceDirLabel)
        self.sourceDirBtn = QPushButton("选择图片目录")  # 源目录选择按钮
        self.sourceDirBtn.clicked.connect(self.chooseSourceDirectory)
        h_layout.addWidget(self.sourceDirBtn)

        # 显示目标目录
        h_layout2 = QHBoxLayout()
        self.targetDirLabel = QLabel("目标目录: 未选择")
        h_layout2.addWidget(self.targetDirLabel)
        self.targetDirBtn = QPushButton("选择目标目录") # 目标目录选择按钮
        self.targetDirBtn.clicked.connect(self.chooseTargetDirectory)
        h_layout2.addWidget(self.targetDirBtn)

        # 宽度和高度输入
        h_layout3 = QHBoxLayout()
        self.widthEdit = QLineEdit()
        self.heightEdit = QLineEdit()
        h_layout3.addWidget(QLabel("宽度:"))
        h_layout3.addWidget(self.widthEdit)
        h_layout3.addWidget(QLabel("高度:"))
        h_layout3.addWidget(self.heightEdit)

        layout.addLayout(h_layout)
        layout.addLayout(h_layout2)
        layout.addLayout(h_layout3)
        # 运行按钮
        self.runButton = QPushButton("运行")
        self.runButton.clicked.connect(self.resizeImages)
        layout.addWidget(self.runButton)

        # 状态提示
        self.statusLabel = QLabel("")
        layout.addWidget(self.statusLabel)

        self.setLayout(layout)

    def chooseSourceDirectory(self):
        dir_ = QFileDialog.getExistingDirectory(self, "选择图片目录")
        if dir_:
            self.sourceDir = dir_
            self.sourceDirLabel.setText(f"源目录: {self.sourceDir}")

    def chooseTargetDirectory(self):
        dir_ = QFileDialog.getExistingDirectory(self, "选择目标目录")
        if dir_:
            self.targetDir = dir_
            self.targetDirLabel.setText(f"目标目录: {self.targetDir}")

    def resizeImages(self):
        if not hasattr(self, 'sourceDir') or not hasattr(self, 'targetDir'):
            self.statusLabel.setText("错误:请先选择源目录和目标目录。")
            return

        try:
            width = int(self.widthEdit.text())
            height = int(self.heightEdit.text())
        except ValueError:
            self.statusLabel.setText("错误:请输入有效的宽度和高度。")
            return

        for imagePath in os.listdir(self.sourceDir):
            fullPath = os.path.join(self.sourceDir, imagePath)
            if os.path.isfile(fullPath):
                with Image.open(fullPath) as img:
                    img = img.resize((width, height))
                    img.save(os.path.join(self.targetDir, imagePath))

        self.statusLabel.setText("缩放完成。")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ImageResizer()
    ex.show()
    sys.exit(app.exec_())
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值