Python PIL - AttributeError: 'NoneType' object has no attribute 'save'
Python PIL - AttributeError: 'NoneType' object has no attribute 'save'
我使用此代码使用 PIL 删除图像的边框:
def RemoveBlackBorders(img):
bg = Image.new(img.mode, img.size, img.getpixel((0,0)))
diff = ImageChops.difference(img, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
if bbox:
return img.crop(bbox)
来自 here
我用它来处理文件夹中包含的所有图像:
def CropImages():
global FOLDER
for i in range(1, len(os.listdir(FOLDER))+1):
image = FOLDER + "\" + str(i) + ".jpg"
img = Image.open(image)
img = RemoveBlackBorders(img)
img.save(image, "JPEG")
一切正常,程序完成了它的工作。问题是,如果文件夹中有全黑图像(检测为 "border"),程序会卡住并给出错误:
AttributeError: 'NoneType' object has no attribute 'save'
None 文件夹中的图像被裁剪,即使黑色图像是系列中的最后一张。有没有办法跳过或删除这张图片(哪个更好)?
由于RemoveBlackBorders
returnsNone
对于100%边框的图像,您可以稍后在决定是否保存时检查None
。
def CropImages():
global FOLDER
for i in range(1, len(os.listdir(FOLDER))+1):
image = FOLDER + "\" + str(i) + ".jpg"
img = Image.open(image)
img = RemoveBlackBorders(img)
if img is not None:
img.save(image, "JPEG")
EAFP 的 Python 原则可以适用于此。
基本上你应该让你的代码尝试执行然后捕获一个 AttributeError,告诉它跳过那个图像。
像这样:
def CropImages():
global FOLDER
for i in range(1, len(os.listdir(FOLDER))+1):
image = FOLDER + "\" + str(i) + ".jpg"
img = Image.open(image)
img = RemoveBlackBorders(img)
try:
img.save(image, "JPEG")
except AttributeError:
print("Couldn't save image {}".format(image))
这只是意味着,如果发现错误,它将打印消息,然后继续循环处理其余部分。
我使用此代码使用 PIL 删除图像的边框:
def RemoveBlackBorders(img):
bg = Image.new(img.mode, img.size, img.getpixel((0,0)))
diff = ImageChops.difference(img, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
if bbox:
return img.crop(bbox)
来自 here
我用它来处理文件夹中包含的所有图像:
def CropImages():
global FOLDER
for i in range(1, len(os.listdir(FOLDER))+1):
image = FOLDER + "\" + str(i) + ".jpg"
img = Image.open(image)
img = RemoveBlackBorders(img)
img.save(image, "JPEG")
一切正常,程序完成了它的工作。问题是,如果文件夹中有全黑图像(检测为 "border"),程序会卡住并给出错误:
AttributeError: 'NoneType' object has no attribute 'save'
None 文件夹中的图像被裁剪,即使黑色图像是系列中的最后一张。有没有办法跳过或删除这张图片(哪个更好)?
由于RemoveBlackBorders
returnsNone
对于100%边框的图像,您可以稍后在决定是否保存时检查None
。
def CropImages():
global FOLDER
for i in range(1, len(os.listdir(FOLDER))+1):
image = FOLDER + "\" + str(i) + ".jpg"
img = Image.open(image)
img = RemoveBlackBorders(img)
if img is not None:
img.save(image, "JPEG")
EAFP 的 Python 原则可以适用于此。
基本上你应该让你的代码尝试执行然后捕获一个 AttributeError,告诉它跳过那个图像。
像这样:
def CropImages():
global FOLDER
for i in range(1, len(os.listdir(FOLDER))+1):
image = FOLDER + "\" + str(i) + ".jpg"
img = Image.open(image)
img = RemoveBlackBorders(img)
try:
img.save(image, "JPEG")
except AttributeError:
print("Couldn't save image {}".format(image))
这只是意味着,如果发现错误,它将打印消息,然后继续循环处理其余部分。