使用PIL的Python程序拒绝再次运行

时间:2018-11-02 15:25:43

标签: python python-imaging-library thumbnails exif

我写了这个简短的程序,将文件夹中的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。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 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")