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标准库内置函数complex介绍
Nov 25 Python
python django 实现验证码的功能实例代码
May 18 Python
Python实现的文本编辑器功能示例
Jun 30 Python
Python星号*与**用法分析
Feb 02 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
Django获取应用下的所有models的例子
Aug 30 Python
python通过matplotlib生成复合饼图
Feb 06 Python
在TensorFlow中实现矩阵维度扩展
May 22 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初学者(入门学习经验谈)
2010/10/12 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
PHP线程的内存回收问题
2016/07/08 PHP
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python实现验证码识别
2020/06/15 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
车祸赔偿收入证明
2014/01/09 职场文书
商超业务员岗位职责
2014/03/12 职场文书
爱心捐款倡议书
2014/04/14 职场文书
给老婆的保证书范文
2014/04/28 职场文书
营销学习心得体会
2014/09/12 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS