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字符串的常用操作方法小结
May 21 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
浅谈对yield的初步理解
May 29 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
Python实现端口检测的方法
Jul 24 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
Django框架安装方法图文详解
Nov 04 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
Python中Yield的基本用法
Oct 18 Python
Python通过len函数返回对象长度
Oct 22 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 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 面向对象实现代码
2009/11/11 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
十大使用PHP框架的理由
2015/09/26 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python实现电子词典
2020/03/03 Python
销售工作岗位职责
2013/12/24 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
社区低保工作总结2015
2015/07/23 职场文书
岗位聘任协议书
2015/09/21 职场文书
2016母亲节感恩话语
2015/12/09 职场文书