使用python语言递归遍历父文件夹下子目录中的图像并进行批量化操作的方法案例(二)

本文介绍了一种使用Python和PIL库对目录下多个子文件夹中的图像进行批量resize的方法,详细展示了代码实现过程,包括创建输出目录、遍历图像、调整尺寸及保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Index 目录索引

需求分析

在做 CV 等任务时,会遇到对图像进行批量操作的情况,本篇文章接上篇 使用python语言递归遍历父文件夹下子目录中的图像并进行批量化操作的方法案例,继续针对resize的操作进行研究。

异同

上篇文章中使用到了thumbnail进行图像的resize操作,不过该方法和resize的方法是有区别的,详见 python:PIL库中Image类thumbnail方法和resize方法的比较 这篇文章1

代码实现

本案例仍是对'./img' 这个父文件夹下的子文件夹中的图像进行批量裁剪操作,文件夹目录结构如下(其中'./img' 为父文件夹,ABZ为父文件夹下的各个子文件夹):

-<img>
   -<A>
      -图片.jpg
      -图片.jpg
      ...
      -图片.jpg
   -<B>
      -图片.jpg
      -图片.jpg
      ...
      -图片.jpg
   ...
   -<Z>
      -图片.jpg
      -图片.jpg
      ...
      -图片.jpg

本案例在上篇文章的基础上进行修改,实现代码如下2

import os
import shutil
import time
from time import sleep
from PIL import Image
from tqdm import tqdm


def makeDirs(path):
    # 创建新的输出子目录,若存在输出该目录则删除该目录及其子文件夹和文件
    if os.path.exists(path):
        shutil.rmtree(path)
    os.mkdir(path)


def resizePics():

    # default_path=os.getcwd()  ##设置默认打开目录,即当前目录
    # default_path = "/pics"

    # inpath = os.getcwd()
    # inpath = './img'
    inpath = './img'
    # inpath = './img'
    outdir = os.path.basename(inpath) + '_resize'
    outpath = os.path.join(os.path.dirname(inpath), outdir)

    makeDirs(outpath)

    # 列出所在目录下的所有目录和文件
    lists = os.listdir(inpath)

    starttime = time.time()
    for i in tqdm(range(0, len(lists))):
        subdir = lists[i]
        subpath = inpath + "/" + subdir  # 子目录路径
        if os.path.isdir(subpath):
            # outsubdir = subdir + '-resize'
            outsubdir = subdir
            outsubpath = os.path.join(outpath, outsubdir)

            makeDirs(outsubpath)

            # 对文件夹下的照片文件调整大小
            # 列出某个子目录下的所有文件和目录
            flists = os.listdir(subpath)
            for j in tqdm(range(0, len(flists))):
                sleep(0.01)
                fname = flists[j]
                fpath = subpath + "/" + fname
                # 以下改动
                outfile = outsubpath + '\\' + fname
                width = 128
                height = 128
                if os.path.isfile(fpath):
                    # resizeSinglePic(fname, fpath, outsubpath)
                    image = Image.open(fpath)
                    image_size = image.resize((width, height), Image.ANTIALIAS)
                    image_size.save(outfile)


    passtime = time.time()-starttime
    print('照片压缩完毕,总共花费了 %f s' % (passtime))


# def resizeSinglePic(fname, fpath, outsubpath):
#     fbasename = os.path.basename(fpath)
#     fext = os.path.splitext(fpath)[-1]
#     if fext in img_ext:
#         img = Image.open(fpath)
#         # img.thumbnail(size)
#         img.resize(128, 128)
#         outfile = outsubpath + "/" + fbasename
#         img.save(outfile)


# img_ext = ['.bmp', '.jpeg', '.JPEG','.gif', '.psd', '.png', '.JPG', '.jpg']
# size = (128, 128)
resizePics()

代码中使用到的resize方法灵感来自于 img.resize()函数的作用和用法-单张图像变换大小 这篇文章3,并参考了 使用python对文件夹内的照片进行批量修改尺寸 这篇文章4

通过上述代码,即可实现对'./img' 父文件夹下ABZ这些子文件夹中图像的批量 resize 操作。

写到这里,差不多本文就要结束了。如果有问题可以在下方留言区留言交流。如果我的这篇文章帮助到了你,那我也会感到很高兴,一个人能走多远,在于与谁同行


  1. python:PIL库中Image类thumbnail方法和resize方法的比较 ↩︎

  2. 使用python对文件夹下的照片进行批量修改尺寸 ↩︎

  3. img.resize()函数的作用和用法-单张图像变换大小 ↩︎

  4. 使用python对文件夹内的照片进行批量修改尺寸 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值