我写了这个简短的程序,将文件夹中的JPEG文件转换为缩略图。
?fields=*.*
这真的很奇怪,因为程序第一次运行良好。如果我再次运行它,则在第一个图像之后失败,而没有先删除它第一次创建的缩略图。
这是我收到的错误消息:
import os
import glob
from PIL import Image
from PIL import ExifTags
size = (800,800)
for infile in glob.glob("c:/Users/ascklee/Desktop/PIL_test/*.jpg"):
file, ext = os.path.splitext(infile)
im = Image.open(infile)
exif = {
ExifTags.TAGS[k]: v
for k, v in im._getexif().items()
if k in ExifTags.TAGS
}
for i in exif:
print (i, ":", exif[i])
if exif['Orientation'] == 3:
image=im.rotate(180, expand=True)
elif exif['Orientation'] == 6:
image=im.rotate(270, expand=True)
elif exif['Orientation'] == 8:
image=im.rotate(90, expand=True)
image.thumbnail(size)
image.save(file + "_TN" + ".jpg", "JPEG")
我正在使用IDLE 3.7.0。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
其中一张图片正在将None
返回到im._getexif()
调用,可能没有任何exif标记,您可以通过将代码更改为以下形式来解决此问题
import os
import glob
from PIL import Image
from PIL import ExifTags
size = (800,800)
for infile in glob.glob("c:/Users/ascklee/Desktop/PIL_test/*.jpg"):
file, ext = os.path.splitext(infile)
im = Image.open(infile)
try:
exif = {
ExifTags.TAGS[k]: v
for k, v in im._getexif().items()
if k in ExifTags.TAGS
}
except AttributeError:
print('this image has no exif tags')
continue
for i in exif:
print (i, ":", exif[i])
if exif['Orientation'] == 3:
image=im.rotate(180, expand=True)
elif exif['Orientation'] == 6:
image=im.rotate(270, expand=True)
elif exif['Orientation'] == 8:
image=im.rotate(90, expand=True)
image.thumbnail(size)
image.save(file + "_TN" + ".jpg", "JPEG")