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程序设计有所帮助。