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线程锁(thread)学习示例
Dec 04 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
python中随机函数random用法实例
Apr 30 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
python用什么编辑器进行项目开发
Jun 17 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
python将图片转为矢量图的方法步骤
Mar 30 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 登录完成后如何跳转上一访问页面
2014/01/14 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
初三学生个人自我评定
2014/04/06 职场文书
家长通知书家长评语
2014/04/17 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
SQL语句多表联合查询的方法示例
2022/04/18 MySQL