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 获取文件列表(或是目录例表)
Mar 25 Python
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
Java分治归并排序算法实例详解
Dec 12 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
如何通过Python实现标签云算法
Jul 02 Python
Python列表切片常用操作实例解析
Dec 16 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
Python json格式化打印实现过程解析
Jul 21 Python
用Python实现Newton插值法
Apr 17 Python
Python爬虫实战之爬取携程评论
Jun 02 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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
node.js集成百度UE编辑器
2015/02/05 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
python实现ping的方法
2015/07/06 Python
Python中特殊函数集锦
2015/07/27 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
python编程实现归并排序
2017/04/14 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
后勤采购员岗位职责
2013/12/19 职场文书
单位婚育证明范本
2014/11/21 职场文书
项目投资意向书范本
2015/05/09 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js