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 19 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
python对象转字典的两种实现方式示例
Nov 07 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 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
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
js实现楼层导航功能
2017/02/23 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
详解python中init方法和随机数方法
2019/03/13 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python 读取位于包中的数据文件
2020/08/07 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
小学教师的个人自我鉴定
2013/10/24 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
商铺门面租房协议书
2014/10/21 职场文书
单位婚育证明范本
2014/11/21 职场文书
个人典型事迹材料
2014/12/30 职场文书
安全员岗位职责
2015/02/10 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
无故旷工检讨书
2015/08/15 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书