Python实现自动为照片添加日期并分类的方法


Posted in Python onSeptember 30, 2017

本文实例讲述了Python实现自动为照片添加日期并分类的方法。分享给大家供大家参考,具体如下:

小时候没怎么照相,所以跟别人说小时候特别帅他们都不信。小外甥女出生了,我给买了个照相机,让她多照相。可惜他舅目前还是个?潘浚?蛄烁?00的?潘空障嗷??谷幻挥凶远?尤掌诘墓δ堋J粤思父鲂∪砑??疾缓糜茫?蟮耐枷袢砑?塾植换嵊谩I砦?桓黾扑慊?蒲в爰际踝ㄒ档难???荒茏粤⒏??恕?/p>

听说Python有个图形库,不错,在照片上打日期很容易,于是我就下了这个库。对Python不熟,一面看着手册一面写的。完成了下面的小程序,很简单。还不实用,我再修改一下,加上图形界面,并且将Python代码转换成exe,因为我要把程序给我姐用,所以要做到最傻瓜式。

(1)在相片右下角打印日期,格式类似于 2012-12-05 10:23:46

(2)以上面的日期为例,将原文件重命名为20121205102346.jpg,生成的文件命名为20121205102346DATE.jpg,并且放入文件夹20121205中,这样就可以把相片自动分类了。两个相片拍摄时间到秒数就应该不同了,除非是连拍。

代码(事先安装PIL库,http://www.pythonware.com/products/pil/)

import os,sys,shutil
from PIL import Image
from PIL import ImageDraw
from PIL.ExifTags import TAGS
from PIL import ImageFont
#open image file
if len(sys.argv) < 2:
    print "Usage: ",sys.argv[0]," ImageFile"
    sys.exit(1)
im = Image.open(sys.argv[1])
print 'Image size is:',im.size
#get the info dict
info = im._getexif()
#info store the information of the image
#it stores the info like this: [233:'name',2099:'2012:01:01 10:44:55',...]
#the key need to be decoded,
#This piece of code will extract the time when the photo is taken
for tag,value in info.items():
    decoded = TAGS.get(tag,tag)
    if decoded == 'DateTime':
        date = value
        break
#The date time is in this format '2012:01:01 10:44:22', replace the first two ":" with "-", need a writable list
date_list = []
for x in range(0,len(date)):
    date_list.append(date[x])
date_list[4] = '-'
date_list[7] = '-'
date = ''.join(date_list) #draw.text expect a string, convert it back to string
#the font size will be 1/15 of the images size
font = ImageFont.truetype("FZYTK.TTF",im.size[1] / 15)
draw = ImageDraw.Draw(im)
stringsize=draw.textsize(date,font=font)
print 'Text size is:',stringsize
#put the text to the right corner
draw.text((im.size[0]-stringsize[0],im.size[1]-stringsize[1]),date,fill=255,font=font)
#rename the source photo and the dated photo, eliminate the ':' and '-' and ' '
new_date_list = []
for x in range(0,len(date_list)):
    if date_list[x] != ':' and date_list[x] != '-' and date_list[x] != ' ':
        new_date_list.append(date_list[x])
date = ''.join(new_date_list[0:8])
time = ''.join(new_date_list[8:])
#print date
#print time
dir_name = ''.join(date)
src_filename = ''.join(new_date_list)
dst_filename = src_filename + 'DATE'
#print dir_name
#print src_filename
#print dst_filename
if not os.path.isdir(dir_name):
    os.makedirs(dir_name)
path = dir_name + '/' + dst_filename +'.JPG'
#print path
im.save(path)
shutil.copy(sys.argv[1],dir_name+'/'+src_filename+'.JPG')

效果图如下:

Python实现自动为照片添加日期并分类的方法

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
让python的Cookie.py模块支持冒号做key的方法
Dec 28 Python
用Python实现web端用户登录和注册功能的教程
Apr 30 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
tensorflow实现简单逻辑回归
Sep 07 Python
详解numpy的argmax的具体使用
May 27 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
python内置函数sorted()用法深入分析
Oct 08 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
Python基于requests实现模拟上传文件
Apr 21 Python
python小白切忌乱用表达式
May 29 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 #Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 #Python
Python字符编码与函数的基本使用方法
Sep 30 #Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 #Python
深入浅出学习python装饰器
Sep 29 #Python
Python连接phoenix的方法示例
Sep 29 #Python
Python矩阵常见运算操作实例总结
Sep 29 #Python
You might like
PHP获取MAC地址的函数代码
2011/09/11 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
新闻内页-JS分页
2006/06/07 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python 变量初始化空列表的例子
2019/11/28 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
详解KMP算法以及python如何实现
2020/09/18 Python
竞选大队干部演讲稿
2014/09/11 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
英语演讲开场白
2015/05/29 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫