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从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
python中字符串的操作方法大全
Jun 03 Python
pandas带有重复索引操作方法
Jun 08 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
Python调用Windows命令打印文件
Feb 07 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP分页显示制作详细讲解
2006/12/05 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
原生实现一个react-redux的代码示例
2018/06/08 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
python获得一个月有多少天的方法
2015/06/04 Python
python Opencv将图片转为字符画
2021/02/19 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
wxpython绘制圆角窗体
2019/11/18 Python
python绘制彩虹图
2019/12/16 Python
Python telnet登陆功能实现代码
2020/04/16 Python
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
感恩节红领巾广播稿
2014/02/11 职场文书
借款协议书
2014/04/12 职场文书
2014离婚协议书范文
2014/09/10 职场文书
基层党支部整改方案
2014/10/25 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
收银员岗位职责范本
2015/04/07 职场文书
公司转让协议书
2016/03/19 职场文书
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技