关键词: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 |
2 exifread
exitfread是一个Python模块用于从图片中提取EXIF信息,支持的格式包括tiff、jpeg、png、webp、heic。
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