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 相关文章推荐
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
python实现ping的方法
Jul 06 Python
python中模块的__all__属性详解
Oct 26 Python
windows 下python+numpy安装实用教程
Dec 23 Python
基于Python log 的正确打开方式
Apr 28 Python
用Python3创建httpServer的简单方法
Jun 04 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python and or用法详解
Jun 26 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
Python日志syslog使用原理详解
Feb 18 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
晶体管单管来复再生式收音机
2021/03/02 无线电
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
python字符串连接的N种方式总结
2014/09/17 Python
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
小学生读书活动总结
2014/06/30 职场文书
施工安全责任协议书
2016/03/23 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python