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 Web开发模板引擎优缺点总结
May 06 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
Python 闭包的使用方法
Sep 07 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
pytorch自定义初始化权重的方法
Aug 17 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
python 从list中随机取值的方法
Nov 16 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
python三子棋游戏
May 04 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
js+html制作简单验证码
2017/02/16 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Python实现远程调用MetaSploit的方法
2014/08/22 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
python区分不同数据类型的方法
2019/10/14 Python
python文件读写代码实例
2019/10/21 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
求职自荐信
2013/12/14 职场文书
国税会议欢迎词
2014/01/16 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
公司辞职信模板
2015/05/13 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python