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同时兼容python2和python3的8个技巧分享
Jul 11 Python
python实现基本进制转换的方法
Jul 11 Python
python文件的md5加密方法
Apr 06 Python
matplotlib绘制动画代码示例
Jan 02 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
python之文件读取一行一行的方法
Jul 12 Python
python3.x实现base64加密和解密
Mar 28 Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 Python
python实现按行分割文件
Jul 22 Python
Django 删除upload_to文件的步骤
Mar 30 Python
基于python生成英文版词云图代码实例
May 16 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php读取3389的脚本
2014/05/06 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
Python计算字符宽度的方法
2016/06/14 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
5款非常棒的Python工具
2018/01/05 Python
python实现最长公共子序列
2018/05/22 Python
Python爬取成语接龙类网站
2018/10/19 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
报到证丢失证明
2014/01/11 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
信息管理专业自荐书
2014/06/05 职场文书
2014年服务员工作总结
2014/11/18 职场文书
财务管理制度范本
2015/08/04 职场文书
python面向对象版学生信息管理系统
2021/06/24 Python