python让图片按照exif信息里的创建时间进行排序的方法


Posted in Python onMarch 16, 2015

本文实例讲述了python让图片按照exif信息里的创建时间进行排序的方法。分享给大家供大家参考。具体分析如下:

我们经常会从不同的设备里取出照片,比如照相机,手机,iphone等等,操作系统记录的创建日期经常 会因为拷贝等原因变动,下面的代码可以给图片按照exif里的创建时间进行排序,非常有用。

import os

import shutil

import Image

from PIL.ExifTags import TAGS

def print_all_known_exif_tags():

    for k in sorted(TAGS):

        print k, TAGS[k]

def print_all_exif_tags(image):

    try:

        img = Image.open(image)

    except Exception, e:

        print image, "skipping due to", e

    else:

        xf = img._getexif()

        for tag in xf:

            print TAGS.get(tag), xf[tag]

    finally:

        print 'done'

def get_minimum_creation_time(exif_data):

    mtime = "?"

    if 306 in exif_data and exif_data[306] < mtime: # 306 = DateTime

        mtime = exif_data[306]

    if 36867 in exif_data and exif_data[36867] < mtime: # 36867 = DateTimeOriginal

        mtime = exif_data[36867]

    if 36868 in exif_data and exif_data[36868] < mtime: # 36868 = DateTimeDigitized

        mtime = exif_data[36868]

    return mtime

def get_creationdate_with_filename_as_dict(list_of_folders):

    print "Processing all image files in:"

    result = {}

    for folder in list_of_folders:

        print "- " + folder

        counter = 0

        for f in os.listdir(folder):

            counter += 1

            fullFileName = folder + "\\" + f

            try:

                img = Image.open(fullFileName)

            except Exception, e:

                print "    Skipping '%s' due to exception: %s"%(f, e)

                continue

            mtime = get_minimum_creation_time(img._getexif())

            i = 0

            while mtime+"_"*i in result:

                i += 1

            mtime = mtime+"_"*i

            result[mtime] = fullFileName

        print "  Found %s orignal files in %s."%(counter, folder)

    print "Added total of %s to dictionary."%len(result)

    return result

def copy_from_image_dict_to_directory(image_dict, output_dir):

    assert os.path.exists(output_dir)

    for i,key in enumerate(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 %s files to %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 + subfolder for subfolder in os.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程序设计有所帮助。

Python 相关文章推荐
在Python中使用next()方法操作文件的教程
May 24 Python
Python通过poll实现异步IO的方法
Jun 04 Python
不可错过的十本Python好书
Jul 06 Python
python3.5 email实现发送邮件功能
May 22 Python
Python操作json的方法实例分析
Dec 06 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
python em算法的实现
Oct 03 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
python实现简单的计时器功能函数
Mar 14 #Python
python将图片文件转换成base64编码的方法
Mar 14 #Python
python在Windows8下获取本机ip地址的方法
Mar 14 #Python
python检测远程端口是否打开的方法
Mar 14 #Python
python检测远程udp端口是否打开的方法
Mar 14 #Python
python检测远程服务器tcp端口的方法
Mar 14 #Python
python循环监控远程端口的方法
Mar 14 #Python
You might like
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
wxpython 学习笔记 第一天
2009/02/09 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
简历中个人自我评价范文
2013/12/26 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
机房搬迁方案
2014/05/01 职场文书
医学生求职自荐书
2014/06/12 职场文书
尊师重教演讲稿
2014/09/04 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
高中历史教学反思
2016/02/19 职场文书
导游词之峨眉山
2019/12/16 职场文书