关键词: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进行人脸识别,根据人物进行分类。