调整图像大小时无限循环



我正在运行代码,以调整目录中的所有图像,但是代码在无限循环中。图像进行了调整大小,我只是无法弄清楚如何在一遍后停止它。我也想指定输出为.jpg文件类型。

import os, sys
from PIL import Image
import glob as glob
MY_DIRECTORY = "C:\Users\rzara\Desktop\sample_skulls"
for root, subdirs, files in os.walk(MY_DIRECTORY):
    for filename in files:
        for filename in glob.glob(MY_DIRECTORY+"/*.jpg"):
            size = 250, 250
            file_parts = os.path.splitext(filename)
            outfile = file_parts[0] + '_250x250' + file_parts[1]
            try:
                img = Image.open(filename)
                img = img.resize(size, Image.ANTIALIAS)
                img.save(outfile)
            except IOError as e:
                print("An exception occured '%s'" %e)

我尝试将保存线更改为:

img.save(outfile,'jpg')

但这给出了:

的错误
line 1983, in save 
save_handler = SAVE[format.upper()]
KeyError: 'JPG'

我看到了两个问题。

首先,您调用walk glob,并迭代两者的结果。这意味着,如果您的目录包含五个文件,并且所有文件都满足了Glob的模式,那么您将迭代五次超过五个文件,总共二十五次。您应该只有一个for filename循环。

第二," JPG"似乎不是受支持的PIL文件格式。但是," jpeg"是。而是尝试。(是的,我觉得img.save("result.jpg")知道结果应该是JPEG很奇怪,但是img.save("result", "jpg")却不是。有时库很奇怪。)

一起,结果可能看起来像:

import os, sys
from PIL import Image
import glob as glob
MY_DIRECTORY = "C:\Users\rzara\Desktop\sample_skulls"
for filename in glob.glob(MY_DIRECTORY+"/*.jpg"):
    size = 250, 250
    file_parts = os.path.splitext(filename)
    outfile = file_parts[0] + '_250x250' + file_parts[1]
    img = Image.open(filename)
    img = img.resize(size, Image.ANTIALIAS)
    img.save(outfile, 'jpeg')

您可以在程序的末尾添加以下3行以查找尝试可能遇到的任何其他错误吗?

    except Exception as message:
        print('general exception')
        print(message)
for filename in files:
    for filename in glob.glob(MY_DIRECTORY+"/*.jpg"):

您是从files获取文件名,但立即用其他源的文件名的序列替换。虽然不是,但IPSO事实是无限的循环,它强烈表明您有严重的结构错误。

最新更新