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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
Python使用CMD模块更优雅的运行脚本
May 11 Python
python连接mysql实例分享
Oct 09 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python3.6数独问题的解决
Jan 21 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
代码实例讲解python3的编码问题
Jul 08 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 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设计模式 Facade(外观模式)
2011/06/26 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
仅利用30行Python代码来展示X算法
2015/04/01 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Python函数中的可变长参数详解
2019/09/12 Python
python flask搭建web应用教程
2019/11/19 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
PyTorch的torch.cat用法
2020/06/28 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
十佳教师事迹材料
2014/01/11 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
倡议书范文格式
2014/05/12 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
食堂管理制度范本
2015/08/04 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS
vue特效之翻牌动画
2022/04/20 Vue.js