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实现定制交互式命令行的方法
Jul 03 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
简述Python中的进程、线程、协程
Mar 18 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
Python编写Windows Service服务程序
Jan 04 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
详解django自定义中间件处理
Nov 21 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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
第十一节 重载 [11]
2006/10/09 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
微信小程序实现打卡签到页面
2020/09/21 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python环境下安装opencv库的方法
2020/03/05 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Python如何安装第三方模块
2020/05/28 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
python线程优先级队列知识点总结
2021/02/28 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
函数指针的定义是什么
2016/08/14 面试题
带薪年假请假条
2014/02/04 职场文书
主办会计岗位职责
2014/03/13 职场文书
小学五年级学生评语
2014/04/22 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
python 远程执行命令的详细代码
2022/02/15 Python
java实现web实时消息推送的七种方案
2022/07/23 Java/Android