【问题标题】:Python PIL - AttributeError: 'NoneType' object has no attribute 'save'Python PIL - AttributeError:“NoneType”对象没有属性“保存”
【发布时间】:2015-07-31 09:17:45
【问题描述】:

我使用此代码使用 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")

一切正常,程序完成了他的工作。问题是如果文件夹中有一个全黑图像(被检测为“边框”),程序就会卡住给我错误:

 AttributeError: 'NoneType' object has no attribute 'save'

文件夹中的所有图像都不会被裁剪,即使黑色图像是该系列的最后一张。有没有办法跳过这张图片或删除它(哪个更好)?

【问题讨论】:

    标签: python border python-imaging-library crop trim


    【解决方案1】:

    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))
    

    这只是意味着如果它发现该错误,它将打印该消息,然后继续循环其余部分。

    【讨论】:

      【解决方案2】:

      由于RemoveBlackBorders 为100% 边框的图像返回None,因此您可以稍后在决定是否保存时检查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")
      

      【讨论】:

        猜你喜欢
        • 2020-10-27
        • 2019-10-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-28
        • 2017-10-05
        • 2018-03-17
        • 2019-01-10
        • 2013-08-06
        相关资源
        最近更新 更多