python让图片按照exif信息里的创建时间进行排序的方法

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Python实现按学生年龄排序的实际问题详解

    前言 本文主要给大家了关于利用Python按学生年龄排序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 问题:定义一个Class:包含姓名name.性别gender.年龄age,需要按年龄给学生排序. 输入:包含学生对象的List. 输出:按照年龄age进行排序好的List. 思路1:使用冒泡排序,比较相邻的学生,如果第一个学生的age值比第二个学生的age值大,那么就整体交换这两个元素.持续每次对越来越少的元素重复上面的步骤.一直到没有任何一对学生需要比较. 思路2

  • python 字典(dict)按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序. dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.items(), key=lambda d:d[1], reverse = True) print(dict) 输出的结果: [('aa', 74),

  • python读取TXT到数组及列表去重后按原来顺序排序的方法

    本文实例讲述了python读取TXT到数组及列表去重后按原来顺序排序的方法.分享给大家供大家参考.具体如下: #################################################################### # python 读取TXT到数组 列表去重,不打乱原来的顺序 # 刚学写的不好请大家见谅 #################################################################### def open_tx

  • Python中对元组和列表按条件进行排序的方法示例

    在python中对一个元组排序 我的同事Axel Hecht 给我展示了一些我所不知道的关于python排序的东西. 在python里你可以对一个元组进行排序.例子是最好的说明: >>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')] >>> sorted(items) [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')] 默认情况下内置的sort和so

  • python中合并两个文本文件并按照姓名首字母排序的例子

    前段时间前在网上看到一段面试题,要求如下: employee文件中记录了工号和姓名 复制代码 代码如下: cat employee.txt: 100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma bonus文件中记录工号和工资 复制代码 代码如下: cat bonus.txt: 100 $5,000 200 $500 300 $3,000 400 $1,250 要求把两个文件合并并输出如下, 处理结果: 复制代码 代码如下:

  • python让图片按照exif信息里的创建时间进行排序的方法

    本文实例讲述了python让图片按照exif信息里的创建时间进行排序的方法.分享给大家供大家参考.具体分析如下: 我们经常会从不同的设备里取出照片,比如照相机,手机,iphone等等,操作系统记录的创建日期经常 会因为拷贝等原因变动,下面的代码可以给图片按照exif里的创建时间进行排序,非常有用. 复制代码 代码如下: import os import shutil import Image from PIL.ExifTags import TAGS def print_all_known_ex

  • php通过exif_read_data函数获取图片的exif信息

    php获取图片的exif信息,php自带一个exif_read_data函数可以用来读取图片的exif信息,代码来自php手册 <?php echo "test1.jpg:<br />\n"; $exif = exif_read_data('tests/test1.jpg', 'IFD0'); echo $exif===false ? "No header data found.<br />\n" : "Image conta

  • Python实现对字典分别按键(key)和值(value)进行排序的方法分析

    本文实例讲述了Python实现对字典分别按键(key)和值(value)进行排序的方法.分享给大家供大家参考,具体如下: 方法一: #使用sorted函数进行排序 ''' sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数; 其中iterable表示可以迭代的对象,例如可以是dict.items().dict.keys()等 key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reve

  • 基于python对B站收藏夹按照视频发布时间进行排序的问题

    前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难,因此就对收藏夹里面的视频进行了分类.但是分类之后紧接着又出现了一个新的问题:原来存放在默认收藏夹里面视频的相对顺序被打乱了--明明前几天刚收藏的视频却要翻很多很多页才能找到,因此有了这个程序. 程序的作用 因为我们看到的视频大部分都是通过推荐得到的,而推荐的视频大部分都是刚发布不久,因此大部分收藏的视频的顺序也基本是按照视频发布的顺序来的.那么通过程序

  • flex压缩图片exif信息(作者/相机)丢失问题解决

    在用flex的jpegencoder对图片进行压缩的时候,exif信息会丢失,也就是图片的作者,用的相机,神马的,全部都没有了,怎么办呢? 经研究jpeg的文档,最终解决这个问题 1.jpeg的文件格式,分成一个一个frame,每个frame以0xFF打头,然后跟着一个标识未,比如0xFFD8表示文件的开始,0xFFD9表示文件结束,紧接着标识位的是这个frame的长度,长度不包括0xFF和标识位,但包括这个2个字节的长度,比如一个frame开始了,先是一个0xFF然后是一个0xXX,然后是两个

  • Java读取图片EXIF信息的方法

    本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image File的缩写,这是一种专门为数码相机照片设定的格式.这种格式可以用来记录数字照片的属性信息,例如相机的品牌及型号.相片的拍摄时间.拍摄时所设置 的光圈大小.快门速度.ISO等等信息.除此之外它还能够记录拍摄数据,以及照片格式化方式,这样就可以输出到兼容EXIF格式的外设上,例如照片打印机 等. 目前最常见的支持EXIF信息的图片格式

  • PHP中读取照片exif信息的方法

    先来了解什么是图片的Exif信息 Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色彩编码.拍摄时录制的声音以及全球定位系统(GPS).缩略图等.简单地说,Exif=JPEG+拍摄参数.因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息. 以上引自百度百科. 读

  • python用来获得图片exif信息的库实例分析

    本文实例讲述了python用来获得图片exif信息的库用法.分享给大家供大家参考.具体分析如下: exif-py是一个纯python实现的获取图片元数据的python库,官方下载地址: http://exif-py.svn.sourceforge.net/viewvc/exif-py/source/EXIF.py?revision=19&view=markup 下面的代码演示的是调用方法. 复制代码 代码如下: # library test/debug function (dump given

  • python通过pil模块获得图片exif信息的方法

    本文实例讲述了python通过pil模块获得图片exif信息的方法.分享给大家供大家参考.具体分析如下: python的pil模块功能超级强大,不但可以用来处理图片也可以用来获取图片的exif数据 from PIL import Image #code from http://www.jb51.net img = Image.open('img.jpg') exif_data = img._getexif() 希望本文所述对大家的Python程序设计有所帮助.

  • python通过exifread模块获得图片exif信息的方法

    本文实例讲述了python通过exifread模块获得图片exif信息的方法.分享给大家供大家参考.具体分析如下: python可通过exifread模块获得图片exif信息 exifread模块的下载地址:https://pypi.python.org/pypi/ExifRead 也可以通过pip进行安装:pip install exifread import exifread # Open image file for reading (binary mode) f = open(path_

随机推荐