利用pillow库(PIL)批量修改图片尺寸

Posted dmcs95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用pillow库(PIL)批量修改图片尺寸相关的知识,希望对你有一定的参考价值。

楔子

平时使用Snipaste截图总是不注意图片的尺寸,导致保存了一堆大大小小尺寸不一的图片
在写文档的时候插入图片显得很杂乱,因此抽空写了个小工具帮我批量格式化文件夹中的图片尺寸成一样的大小

代码

import os
from tkinter import *


class Application(object):
    def __init__(self):
        self.root = Tk()
        self.root.title(‘格式化图片尺寸‘)
        self.path = StringVar()
        self.size = StringVar()

        Label(self.root, text="目标路径:").grid(row=0, column=0)
        Entry(self.root, textvariable=self.path).grid(row=0, column=1)
        Button(self.root, text="路径选择", command=self.selectPath).grid(row=0, column=2)

        Label(self.root, text="目标大小:").grid(row=1, column=0)
        Entry(self.root, textvariable=self.size).grid(row=1, column=1)
        Button(self.root, text="确定选择", command=self.formatSize).grid(row=1, column=2)

        Button(self.root, text="退出程序", command=self.root.destroy).grid(row=2, column=2)

    def run(self):
        self.root.mainloop()

    def selectPath(self):
        from tkinter.filedialog import askdirectory
        path_ = askdirectory()
        self.path.set(path_)

    def formatSize(self):
        from PIL import Image
        from glob import glob
        import tkinter.messagebox as messagebox
        sourcesPathList = glob(os.path.join(self.path.get(), ‘*.png‘))
        sourcesPathList.extend(glob(os.path.join(self.path.get(), ‘*.jpg‘)))
        sourcesPathList.extend(glob(os.path.join(self.path.get(), ‘*.jpeg‘)))
        sourcesPathList.extend(glob(os.path.join(self.path.get(), ‘*.bmp‘)))

        if not os.path.exists(‘./result‘):
            os.mkdir(‘./result‘)
        try:
            if not sourcesPathList:
                messagebox.showinfo(‘警告‘, ‘所选文件夹内容为空‘)
                assert not ‘0‘
            for p in sourcesPathList:
                tmp = Image.open(p)
                try:
                    res = tmp.resize([int(i) for i in self.size.get().split(‘,‘)], Image.ANTIALIAS)
                except ValueError:
                    res = tmp.resize([int(i) for i in self.size.get().split(‘,‘)], Image.ANTIALIAS)
                res.save(os.path.join(‘./result‘, p.split(‘\\‘)[-1]), quality=95)
            messagebox.showinfo(‘提示‘, ‘修改成功‘)
        except (FileNotFoundError, AssertionError):
            messagebox.showinfo(‘警告‘, ‘修改失败‘)


if __name__ == ‘__main__‘:
    app = Application()
    app.run()

使用说明

1、命令行 python formatPic.py

2、技术图片
3、点击路径选择(只需要选择图片文件所在的文件夹,推荐把要修改尺寸的图片都放到一个文件夹下)
4、输入目标大小(100,200或者100,200,可以兼容中英文标点)
5、点击确定选择
6、修改成功或失败皆会有弹窗提示
7、使用完毕点击退出程序即可关闭
8、修改好尺寸的图片可以到脚本同路径下的 result 文件夹下查看

【完】








以上是关于利用pillow库(PIL)批量修改图片尺寸的主要内容,如果未能解决你的问题,请参考以下文章

Python批量修改图片格式和尺寸

python 利用PIL库进行更改图片大小的操作

python中用Pillow库进行图片处理

python中用Pillow库进行图片处理

windows 借助 wsl 使用pyheif 和 PIL Pillow实现对苹果 heif 格式的图像批量转换

windows 借助 wsl 使用pyheif 和 PIL Pillow实现对苹果 heif 格式的图像批量转换