Python 进阶 之 递归获取指定文件夹下所有指定后缀名图片,并且对应压缩所有指定图片文件大小

Python 进阶 之 递归获取指定文件夹下所有指定后缀名图片,并且对应压缩所有指定图片文件大小

目录

Python 进阶 之 递归获取指定文件夹下所有指定后缀名图片,并且对应压缩所有指定图片文件大小

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

六、关键代码


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里介绍递归获取指定文件夹下的所有文件,并且针对指定类型的图片文件进行压缩大小,这里使用Pillow 中的 imgae 进行 jpg 和 png 类型的图片进行压缩,这里简单介绍,方法不唯一,如果不足或更好的方法,还请留言补充。

操作环境:

  • 1、win 10
  • 2、python 3.8
  • 3、pycharm 2022.1.3
     

二、实现原理

1、os.listdir 读取文件夹下的所有文件,如果是文件 os.path.isfile ,且是指定jpg和 png 后缀类型图片文件,进行对应图片压缩

2、如果是文件夹,递归第一步处理即可

3、其中 使用 from PIL import Image ,Image 进行图片压缩

三、注意事项

1、由于 python 3.8 ,环境中安装 Pillow 插件, Pillow 中包含 PIL

2、根据需要设置图片压缩质量 quality

四、效果预览

1、未压缩前对应文件大小

 2、压缩后对应文件大小

 

五、实现步骤

1、准备环境文件夹 和 图片,TestImageFolder 文件夹下添加 1 文件夹,2.txt 、img1.jpg和img2.png,然后 1 文件夹下,添加 img1.jpg和img2.png

 

2、首先实现递归读取文件夹下的文件,主要是 os.listdir 相关

2、其次 image.open 打开图片,save 进行压缩保存

3、针对 后缀 jpg 和 png 的图片文件进行过滤图片压缩处理

4、指定图片文件夹,即可递归进行图片压缩处理,压缩结果如下

六、关键代码

import os
from PIL import Image


def recursiveGetFilesFromFolder(folderPath, fileHandler):
    """
    递归获取文件夹下的文件,并做对应处理
    :param folderPath: 文件夹路径
    :param fileHandler: 对文件的处理函数
    :return:
    """
    pathDir = os.listdir(folderPath)
    print("pathDir = ", pathDir)
    for fileOrDir in pathDir:
        fileOrDirPath = os.path.join('%s\%s' % (folderPath, fileOrDir))
        print("fileOrDirPath = " + fileOrDirPath)
        if os.path.isfile(fileOrDirPath):
            if fileHandler:
                fileHandler(fileOrDirPath)
            continue
        # 是文件夹,则递归处理
        recursiveGetFilesFromFolder(fileOrDirPath, fileHandler)


def compressImageFile(filePath, quality):
    """
    进行图片文件压缩处理
    :param filePath: 文件路径
    :param quality: 压缩图片质量 1-100
    :return:
    """
    im = Image.open(filePath)
    # quality 是设置压缩比
    im.save(filePath, quality=quality)
    im.close()


def handleImageFile(filePath):
    """
    处理 jpg png 后缀的文件
    :param filePath:文件路径
    :return:
    """
    if filePath.endswith(".jpg") or filePath.endswith(".png"):
        compressImageFile(filePath, 20)


def test():
    recursiveGetFilesFromFolder(r'E:\Study\z_tmp\TestImageFolder', handleImageFile)


if __name__ == '__main__':
    test()

猜你喜欢

转载自blog.csdn.net/u014361280/article/details/125965751
今日推荐