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通过urllib2爬网页上种子下载示例
Feb 24 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
Django框架用户注销功能实现方法分析
May 28 Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
python3获取url文件大小示例代码
Sep 18 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
python request 模块详细介绍
Nov 10 Python
python 实用工具状态机transitions
Nov 21 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+MySQL的聊天室设计
2006/10/09 PHP
php session 预定义数组
2009/03/16 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
Django安装配置mysql的方法步骤
2018/10/15 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
租房协议书范本
2014/04/09 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
Python机器学习之基础概述
2021/05/19 Python
 Python 中 logging 模块使用详情
2022/03/03 Python
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL