首页 > 编程语言 >Python根据图片拍摄日期等整理重命名

Python根据图片拍摄日期等整理重命名

时间:2023-03-16 18:56:36浏览次数:50  
标签:重命名 拍摄 Exif Python pic exifread file date

关键词:exif、exifread等等。

最近在整理多年拍摄的图片,希望按照拍摄时间进行排序整理制作相册。

但是有的图片有水印显示拍摄日期;有的文件创建日期因为搬运创建日期和修改日期都已不能反映拍摄日期。

后通过查看图片详细信息,发现有拍摄日期信息。所以通过Python+exifread去读取拍摄日期信息,并对文件进行重命名排序。

1 关于EXIF

可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。 Exif最初由日本电子工业发展协会在1996年制定,版本为1.0。1998年,升级到2.1,增加了对音频文件的支持。2002年3月,发表了2.2版。 Exif可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。 Windows 7操作系统具备对Exif的原生支持,通过鼠标右键点击图片打开菜单,点击属性并切换到详细信息标签下即可直接查看Exif信息。 Exif信息是可以被任意编辑的,因此只有参考的功能。Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所以Exif信息最大为64 kb,而内部采用TIFF格式。
项目 信息(举例)
制造厂商 Canon
相机型号 Canon EOS-1Ds Mark III
图象方向 正常(upper-left)
图象分辨率X 300
图象分辨率Y 300
分辨率单位 dpi
Software AdobePhotoshopCSMacintosh
最后异动时间 2005:10:06 12:53:19
YCbCrPositioning 2
曝光时间 0.00800 (1/125) sec
光圈 F22
拍摄模式 光圈优先
ISO感光值 100
Exif信息版本 30,32,32,31
图象拍摄时间 2005:09:25 15:00:18
图象存入时间 2005:09:25 15:00:18
曝光补偿(EV+-) 0
测光模式 点测光(Spot)
闪光灯 关闭
镜头实体焦长 12 mm
Flashpix版本 30,31,30,30
图象色域空间 sRGB
图象尺寸X 5616pixel
图象尺寸Y 3744 pixel  

参考:Exif_百度百科 (baidu.com)

2 exifread

 exitfread是一个Python模块用于从图片中提取EXIF信息,支持的格式包括tiff、jpeg、png、webp、heic。

官网信息:GitHub - ianare/exif-py: Easy to use Python module to extract Exif metadata from digital image files.

Tags被分为一下几类:Image、Thumnail、EXIF、GPS、Interoperability、MakeNote。

Image: information related to the main image (IFD0 of the Exif data).
Thumbnail: information related to the thumbnail image, if present (IFD1 of the Exif data).
EXIF: Exif information (sub-IFD).
GPS: GPS information (sub-IFD).
Interoperability: Interoperability information (sub-IFD).
MakerNote: Manufacturer specific information. There are no official published references for these tags.

3 使用exifread

安装exifread:

pip install exifread

下面代码从图片中提取拍摄日期,然后对文件进行按照配设日期进行重命名。

import os
import exifread
import shutil

pic_dir='40图片整理/'
output_dir='output/'
if __name__ == '__main__':
    if not os.path.exists(output_dir):
        os.mkdir(output_dir)
    pic_file_lists = os.listdir(pic_dir)
    for pic_file in pic_file_lists:
        if "renamed" in pic_file:
            continue
        with open(pic_dir+pic_file, 'rb') as file_data:
            tags = exifread.process_file(file_data)

            file_date = str(tags['EXIF DateTimeOriginal'])
            if file_date == '':
                continue
            if '/' in file_date:
                file_year = file_date.split(' ')[0].split('/')[2]
                file_month = file_date.split(' ')[0].split('/')[0]
                file_day = file_date.split(' ')[0].split('/')[1]
                file_date_prefix = "renamed_"+file_year+'_'+file_month+'_'+file_day+'_'
            else:
                file_date_prefix = "renamed_"+file_date.split(' ')[0].replace(':', '_')+'_'

        shutil.copy(pic_dir+pic_file, output_dir+file_date_prefix+pic_file)

4 还可以做什么

由这个想到还可以做些什么呢?

1. 根据GPS信息,可以获取拍摄地点。按照地点进行分类。

2. Python+OpenCV进行人脸识别,根据人物进行分类。

标签:重命名,拍摄,Exif,Python,pic,exifread,file,date
From: https://www.cnblogs.com/arnoldlu/p/17219384.html

相关文章

  • Python基础数据类型
    一、字符串1、字符串赋值1.1直接赋值使用'',"",''''''(单、双、三引号)和“=”赋值符号,进行字符串赋值注意:三引号形式的字符串支持换行1.2 通过input()方法 2、字......
  • Python装饰器深入理解
    在本博客的前面部分其实已经介绍过Python中装饰器的基本使用了(Python迭代器、生成器、装饰器的使用,Python@函数装饰器以及super()父类继承 ),不过还有一些深入的知识点(......
  • python并行计算demo,用于求0~n之间的素数之和
     想试试服务器的并行计算能力,就让cpu慢慢计算,计算0~n之间所有素数之和设置target为结尾,num_of_processors为进程数,即可开始跑如下所示frommultiprocessingimportP......
  • 通过Python+CRemoteAPI控制Trace32进行调试
    关键词:Python、CRemoteAPI、Trace32等等。当需要对Trace32调试进行自动化,或者提高效率时,可以通过RemoteControlAPI进行。基本的调试流程如下:Python、C等语言可以通......
  • python 类中的属性排序
    可以使用Python中的类(class)来定义一个包含姓名和年龄的类。以下是一个示例代码:classPerson:def__init__(self,name,age):self.name=namese......
  • python文件目录下的 __init__.py 文件说明(转摘)
    1、python中的项目结构是按照目录来组织的,每个python文件就是一个模块,将模块整合在一起就是包,也就是把服务于某个功能的一系列模块放在一个目录中,这样如果想要使用某个包......
  • 【python】combinations函数遍历列表内元素不同组合
    在参数调优的过程中,不同个体数的样本组合需要计算,但是一个一个用for来穷尽组合的可能显得太过笨拙,查到可以用itertools中的combinations模块来处理类似的问题:fromiterto......
  • python中的typing库
    typing的主要作用有:类型检查,防止运行时出现参数、返回值类型不符作为开发文档附加说明,方便使用者调用时传入和返回参数类型模块加入不会影响程序的运行不会报正式的错......
  • 20230314-python-字典与json
    1.字典的定义                      ......
  • 小白也能学会的精简版GA遗传算法(Python)
    今天无意中看到了一篇讲遗传算法的文章,文章内容很短,大部分都是代码,代码跟平时见到的遗传算法不同之所以要拿这篇文章来讲,主要是因为原文没有对代码进行解释,但是,这段......