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中的List转化成dictionary
Aug 15 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
python3 读写文件换行符的方法
Apr 09 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
python和opencv实现抠图
Jul 18 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
python实现植物大战僵尸游戏实例代码
Jun 10 Python
Python动态导入模块和反射机制详解
Feb 18 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
python连接mysql有哪些方法
Jun 24 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
js实现无缝滚动图
2017/02/22 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
浅析Python四种数据类型
2018/09/26 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
综合实践活动总结
2014/05/05 职场文书
面试必备的求职信
2014/05/25 职场文书
公司领导班子对照材料
2014/08/18 职场文书
企业催款函范本
2015/06/24 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang