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 12 Python
python保存数据到本地文件的方法
Jun 23 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
Python多进程编程multiprocessing代码实例
Mar 12 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
Opencv求取连通区域重心实例
Jun 04 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
python 实现汉诺塔游戏
Nov 28 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
用javascript实现自定义标签
2007/05/08 Javascript
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
python获取图片颜色信息的方法
2015/03/18 Python
python中lambda()的用法
2017/11/16 Python
PyQt5组件读取参数的实例
2019/06/25 Python
Python Selenium参数配置方法解析
2020/01/19 Python
python实现单机五子棋
2020/08/28 Python
家长对孩子的评语
2014/04/18 职场文书
酒店节能降耗方案
2014/05/08 职场文书
员工趣味活动方案
2014/08/27 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
离职告别感言
2015/08/04 职场文书
物业保洁员管理制度
2015/08/05 职场文书