python让图片按照exif信息里的创建时间进行排序的方法
本文实例讲述了python让图片按照exif信息里的创建时间进行排序的方法。分享给大家供大家参考。具体分析如下:
我们经常会从不同的设备里取出照片,比如照相机,手机,iphone等等,操作系统记录的创建日期经常会因为拷贝等原因变动,下面的代码可以给图片按照exif里的创建时间进行排序,非常有用。
importos
importshutil
importImage
fromPIL.ExifTagsimportTAGS
defprint_all_known_exif_tags():
forkinsorted(TAGS):
printk,TAGS[k]
defprint_all_exif_tags(image):
try:
img=Image.open(image)
exceptException,e:
printimage,"skippingdueto",e
else:
xf=img._getexif()
fortaginxf:
printTAGS.get(tag),xf[tag]
finally:
print'done'
defget_minimum_creation_time(exif_data):
mtime="?"
if306inexif_dataandexif_data[306]<mtime:#306=DateTime
mtime=exif_data[306]
if36867inexif_dataandexif_data[36867]<mtime:#36867=DateTimeOriginal
mtime=exif_data[36867]
if36868inexif_dataandexif_data[36868]<mtime:#36868=DateTimeDigitized
mtime=exif_data[36868]
returnmtime
defget_creationdate_with_filename_as_dict(list_of_folders):
print"Processingallimagefilesin:"
result={}
forfolderinlist_of_folders:
print"-"+folder
counter=0
forfinos.listdir(folder):
counter+=1
fullFileName=folder+"\\"+f
try:
img=Image.open(fullFileName)
exceptException,e:
print" Skipping'%s'duetoexception:%s"%(f,e)
continue
mtime=get_minimum_creation_time(img._getexif())
i=0
whilemtime+"_"*iinresult:
i+=1
mtime=mtime+"_"*i
result[mtime]=fullFileName
print" Found%sorignalfilesin%s."%(counter,folder)
print"Addedtotalof%stodictionary."%len(result)
returnresult
defcopy_from_image_dict_to_directory(image_dict,output_dir):
assertos.path.exists(output_dir)
fori,keyinenumerate(sorted(image_dict)):
dummy,extension= os.path.splitext(image_dict[key])
new_file_name=key.replace(":","-")+extension
output_file=output_dir+new_file_name
shutil.copy2(image_dict[key],output_file)
print"Copied%sfilesto%s"%(i+1,output_dir)
if__name__=="__main__":
source_dir="/var/tmp/images"
output_dir="/var/tmp/output"
#obtain/var/tmp/images/iPhone,/var/tmp/images/CanonPowerShot,/var/tmp/images/Nikon1
list_of_folders=[source_dir+subfolderforsubfolderinos.listdir(source_dir)]
all_files=get_creationdate_with_filename_as_dict(list_of_folders)
copy_from_image_dict_to_directory(all_files,output_dir)
希望本文所述对大家的Python程序设计有所帮助。