对于时间足够的情况,按下快门键前请思考

前言

为了在本文中显示照片的详细信息,我使用了Python3程序自动生成markdown

EXIF信息

EXIF信息,是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据 —百度百科

简单来说就是图片上记录的拍摄时间、相机型号、快门速度、感光度、光圈等信息

自动读取照片EXIF信息

程序为Python3

参考:CSDN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import exifread

def get_exif(file_path_set):
f = open(file_path_set, 'rb')
tags = exifread.process_file(f)

# 打印照片其中一些信息
print('拍摄时间:', tags['EXIF DateTimeOriginal'])
print('照相机型号:', tags['Image Model'])
print('镜头型号:', tags['MakerNote LensModel'])
print('照片尺寸:{} X {}'.format(tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength']))
print('快门速度:{}S'.format(tags['EXIF ExposureTime']))
print('感光度:', tags['EXIF ISOSpeedRatings'])
print('光圈:f/{}'.format(eval(str(tags['EXIF FNumber']))))
print('焦距:{} mm'.format(tags['EXIF FocalLength']))
f.close()

get_exif('IMG_4254.jpg') #请改成需要获取信息的图片的路径

如果程序出错,可能是未安装exifread包,可以使用PIP进行安装

1
pip3 install exifread

当然其它安装方法也行

如果仍然出错,可能是图片路径出错,请检查

下图为正常运行输出

后缀名为.CR2和.jpg测试通过,如果仍然出错,可能图片不带EXIF信息

根据EXIF生成markdown文件

完整程序

扫描目录并读取照片信息来生成简单markdown文件

程序包含简单的错误处理

程序于2021/8/2更新,如果想看旧程序可以到 (本站网址/static/post/myshot2/ext/old.py) 获取

此次更新跳过一些无法读取的信息,确保输出尽可能多的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import exifread
import os, time


'''
图片存储的网络位置
'''
pic_http_addr = "/static/post/myshot2"
'''
标题级别(1-5)
'''
value_title_set = 3

mddir = '1.md' #设置输出markdown文件的名称
'''
一般不需要更改的参数
'''
rootdir = './' #设置根路径
show_detail = True #处理时显示EXIF信息:True,否则设置为False
ext_name = ["jpg", "JPG", "jpeg", "JPEG"] #扩展名白名单,需要其它扩展名在此设置,否则过滤
error_list = []
'''
markdown语法设置
1级标题,2级标题,3级标题,4级标题,5级标题,插入图片,加粗
'''
md_setup = [["# ","\n"],["## ","\n"],["### ","\n"],["#### ","\n"],["##### ","\n"]]
md_setup1 = [["![](",")\n"],["**","**\n"]]

'''
获取指定文件路径的图片的EXIF信息
'''
def get_exif(file_path_set):
f = open(file_path_set, 'rb')
tags = exifread.process_file(f)

str_return = "拍摄时间:{}\n".format(tags['EXIF DateTimeOriginal'])
str_return += "照相机型号:{}\n".format(tags['Image Model'])
try:
str_return += "镜头型号:{}\n".format(tags['MakerNote LensModel'])
except:
print("Fail at fetch LensModel, skip it.")
try:
str_return += "照片尺寸:{} X {}\n".format(tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength'])
except:
print("Fail at fetch ImageWidth, skip it.")

str_return += "快门速度:{}S\n".format(tags['EXIF ExposureTime'])
str_return += "感光度:{}\n".format(tags['EXIF ISOSpeedRatings'])
str_return += "光圈:f/{}\n".format(eval(str(tags['EXIF FNumber'])))
str_return += "焦距:{} mm\n".format(tags['EXIF FocalLength'])

# 打印照片其中一些信息
if show_detail:
print(str_return)

f.close()


return str_return

'''
调试时使用
'''
#print(get_exif('IMG_4254.CR2'))
#exit()

'''
参数预检测
'''
try:
mddir = str(mddir)
except:
print("[mddir] should be set to type of str")
exit()
try:
rootdir = str(rootdir)
except:
print("[rootdir] should be set to type of str")
exit()
try:
value_title_set = int(value_title_set)
except:
print("[value_title_set] should be set to type of int")
exit()
if (value_title_set > 5 or value_title_set < 1):
print("[Value_title_set] set up error: please set to range of 1-5")
exit()
if (not pic_http_addr.startswith("http://") and not pic_http_addr.startswith("https://") and not pic_http_addr.startswith("/") and not pic_http_addr.startswith("./")):
print("[pic_http_addr] may error, pic may disappear when accessing")
time.sleep(5)

'''
获取列表允许的后缀名的图片的文件路径
'''
dict_pic_path = []
list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
for i in range(0,len(list)):
path = os.path.join(rootdir,list[i])
if os.path.isfile(path):
str_path = str(path)
str_path = str_path[str_path.rfind(".")+1:]
for i in ext_name: #忽略不在白名单的扩展名
if str_path == i:
#print(path)
dict_pic_path.append(path)
break

'''
处理并输出markdown文件
'''
print("PIC Need Process:", len(dict_pic_path))
try:
with open("{}{}".format(rootdir, mddir), "w") as f:
str_all_part = ""
for i,x in enumerate(dict_pic_path):
print("Process at : {}%, File name : {}".format(int((i+1)/len(dict_pic_path)*100), x)) #计算百分比并显示文件名
for ii,xx in enumerate(md_setup[value_title_set-1]): #按设置大小添加标题语法
if ii == 1:
str_all_part += x[x.rindex("/")+1:]
str_all_part += xx
try:
exif_inf = get_exif(x)
str_all_part += exif_inf
except Exception as e:
print("Read EXIF error: {} of {}".format(x, e))
error_list.append(x)
for ii,xx in enumerate(md_setup1[0]): #添加图片语法
if ii == 1:
str_all_part += pic_http_addr
str_all_part += '/'
str_all_part += x[x.rindex("/")+1:]
str_all_part += xx
str_all_part += '\n'
print("")
f.write(str_all_part)
except:
print("Fail to creat markdown file at : {}{}".format(rootdir, mddir))

#输出错误信息
if len(error_list) != 0:
print("Fail to get EXIF at :")
for i in error_list:
print(" ", end="")
print(i)

print("Press any key to exit...")
input()

运行截图

# 程序输出

# markdown文件生成

遇到错误时,将会在尾部提示

但是无EXIF的图片仍然添加

照片

上面的程序不是本文的重点,下面这些图片才是

来自原片直出

IMG_4254.jpg

拍摄时间:2021:04:10 16:44:46
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/125S
感光度:100
光圈:f/4.5
焦距:29 mm

IMG_4264.jpg

拍摄时间:2021:04:10 16:50:11
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/125S
感光度:400
光圈:f/5.6
焦距:55 mm

IMG_4305.jpg

拍摄时间:2021:04:17 12:32:33
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/100S
感光度:100
光圈:f/5.6
焦距:35 mm

IMG_4309.jpg

拍摄时间:2021:04:17 12:34:14
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/100S
感光度:100
光圈:f/5.6
焦距:49 mm

IMG_4330.jpg

拍摄时间:2021:04:17 13:12:43
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/640S
感光度:100
光圈:f/5.6
焦距:55 mm

IMG_4333.jpg

拍摄时间:2021:04:17 14:44:53
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/30S
感光度:200
光圈:f/5.6
焦距:18 mm

IMG_4336.jpg

拍摄时间:2021:04:17 14:49:03
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/400S
感光度:200
光圈:f/5.6
焦距:20 mm

IMG_4341.jpg

拍摄时间:2021:04:17 15:09:36
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/640S
感光度:200
光圈:f/5.6
焦距:34 mm

IMG_4356.jpg

拍摄时间:2021:04:17 15:51:39
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/400S
感光度:200
光圈:f/5.6
焦距:23 mm

IMG_4381.jpg

拍摄时间:2021:04:17 16:39:42
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/100S
感光度:400
光圈:f/5.6
焦距:55 mm

IMG_4385.jpg

拍摄时间:2021:04:17 16:41:30
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/60S
感光度:100
光圈:f/5.6
焦距:48 mm

IMG_4419.jpg

拍摄时间:2021:04:18 12:13:41
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/60S
感光度:800
光圈:f/5.6
焦距:44 mm

IMG_4444.jpg

拍摄时间:2021:04:18 12:28:19
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/320S
感光度:100
光圈:f/5.6
焦距:48 mm

IMG_4448.jpg

拍摄时间:2021:04:18 12:33:37
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/40S
感光度:100
光圈:f/5.6
焦距:55 mm

IMG_4502.jpg

拍摄时间:2021:04:18 13:24:46
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/160S
感光度:100
光圈:f/5.6
焦距:50 mm

IMG_4514.jpg

拍摄时间:2021:04:18 13:42:17
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/125S
感光度:100
光圈:f/5.6
焦距:44 mm

IMG_4519.jpg

拍摄时间:2021:04:18 13:44:30
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/1000S
感光度:100
光圈:f/5.6
焦距:49 mm

IMG_4522.jpg

拍摄时间:2021:04:18 13:46:07
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/320S
感光度:100
光圈:f/5.6
焦距:49 mm

仅裁切

IMG_4354.jpg

IMG_4391.jpg

IMG_4393.jpg

拍摄时间:2021:04:18 11:48:43
照相机型号:Canon EOS 1300D
镜头型号:EF-S18-55mm f/3.5-5.6 IS II
照片尺寸:5184 X 3456
快门速度:1/80S
感光度:125
光圈:f/5.6
焦距:55 mm

IMG_4421.jpg

IMG_4540.jpg

裁切调整处理或仅调整处理

IMG_4363.jpg

IMG_4493.jpg

IMG_4513.jpg

IMG_4517.jpg

结束

谢谢你看到这里

2021/8/2更新:欢迎去看新照片此处

EOF