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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
Python类属性与实例属性用法分析
May 09 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
简单谈谈Python流程控制语句
Dec 04 Python
在centos7中分布式部署pyspider
May 03 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
python:按行读入,排序然后输出的方法
Jul 20 Python
Python如何计算语句执行时间
Nov 22 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
使用K.function()调试keras操作
Jun 17 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
详细讲解JS节点知识
2010/01/31 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
package.json文件配置详解
2017/06/15 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python判断完全平方数的方法
2018/11/13 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python3让print输出不换行的方法
2020/08/24 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
展会邀请函范文
2014/01/26 职场文书
民主评议党员工作总结
2014/10/20 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android