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的Tornado框架对子域名和泛域名的支持
May 02 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python中import机制详解
Nov 14 Python
如何用python整理附件
May 13 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
Python中新式类与经典类的区别详析
Jul 10 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
Aug 12 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
python urllib和urllib3知识点总结
Feb 08 Python
Python获取百度热搜的完整代码
Apr 07 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新手上路(六)
2006/10/09 PHP
PHP 字符串 小常识
2009/06/05 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
python Flask实现restful api service
2017/12/04 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
tensorflow 模型权重导出实例
2020/01/24 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
物理教师自荐信范文
2013/12/28 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
管辖权异议上诉状
2015/05/23 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js