将文件夹图片转换至指定格式、复制写入拍摄信息、以拍摄时间重命名、无拍摄时间则以文件创建时间命名

from pillow_heif import register_heif_opener
from PIL import Image
import os
import exifread
import piexif
import time


# 批量转化图片至指定格式、复制写入拍摄信息、以拍摄时间重命名、无拍摄时间则以文件创建时间命名
def batchConvertImage(inputFolder, outputFolder, outputFormat):
    # outputFormat: jpeg、png、tiff、raw、dng、bmp

    # 记录图片文件名,防止重名
    fileNames = []

    for fileName in os.listdir(inputFolder):
        # 获取文件夹内单张图片路径
        inputFile = os.path.join(inputFolder, fileName)
        # 读取图片
        img = Image.open(inputFile)
        # 命名格式
        format = '%Y.%m.%d-%H%M%S'
        try:
            # 获取exif信息
            exifDict = piexif.load(img.info['exif'])
            exifBytes = piexif.dump(exifDict)
            # 获取拍摄时间
            shootTime = str(exifDict['Exif'][piexif.ExifIFD.DateTimeOriginal], 'utf-8')
            # 格式化时间
            t = time.strptime(shootTime, '%Y:%m:%d %H:%M:%S')
            t = time.strftime(format, t)
        # 无exif信息则获取图片修改时间
        except Exception:
            # 获取文件信息
            fileStat = os.stat(inputFile)
            # 获取文件修改时间
            modificationTime = fileStat.st_mtime
            # 格式化时间
            t = time.localtime(modificationTime)
            t = time.strftime(format, t)
            exifBytes = None

        # 输出图片路径
        while t in fileNames:
            if len(t) > len(format) + 2:
                t = t[:len(format)+2] + '.' + str(int(t[len(format)+3:])+1)
            else:
                t = t[:len(format)+2] + '.1'
        fileNames.append(t)
        # 图片转化至指定格式
        outputFile = os.path.join(outputFolder, f"{t}.{outputFormat if outputFormat!='jpeg' else 'jpg'}")

        # 若无exif信息
        if exifBytes is None:
            try:
                img.save(outputFile, format=outputFormat)
            except OSError:
                # RGBA转RGB
                img = img.convert('RGB')
                img.save(outputFile, format=outputFormat)
        # 若有exif信息
        else:
            try:
                # 将exif信息写入图片
                img.save(outputFile, format=outputFormat, exif=exifBytes)
            except OSError:
                img = img.convert('RGB')
                img.save(outputFile, format=outputFormat, exif=exifBytes)


# heic需要
register_heif_opener()

inputfolderPath = 'D:\\user\\desktop\\process\\fig'
outputfolderPath = 'D:\\user\\desktop\\process\\out'

outputFormat = "jpeg"
batchConvertImage(inputfolderPath, outputfolderPath, outputFormat)

处理前处理后

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值