删除相同大小图像的有效方法

Efficient way to delete image of the same size

我的文件夹中有很多图片,我想删除相同大小的图片。我下面的代码使用 PIL,可以工作,但我想知道是否有更有效的方法来实现这一点。

import os
from PIL import Image

def checkImages(dirs):
  image_list = os.listdir(dirs)
  for i in range(len(image_list)):
      for j in range(i + 1, len(image_list)):
        im_a = Image.open(dirs + '/' + image_list[i])
        im_b = Image.open(dirs + '/' + image_list[j])
        if im_a.size == im_b.size:
          os.remove(dirs + '/' + image_list[j])
          del image_list[j]

checkImages('/content/gdrive/MyDrive/testdata')

您可以保留一个尺寸字典,并删除任何尺寸已经出现过的图像。这样您就不需要嵌套循环,也不必为同一个文件多次创建 Image 对象。

def checkImages(dirs):
  sizes = {}
  for file in os.listdir(dirs):
      size = Image.open(dirs + '/' + file).size
      if size in sizes:
         os.remove(dirs + '/' + file)
      else:
         sizes[size] = file

请看这个Get Image size WITHOUT loading image into memory

您可以使用库 imagesize

import os
import imagesize

def checkImages(dirs):
  image_list = os.listdir(dirs)
  for i in range(len(image_list)):
      for j in range(i + 1, len(image_list)):
        im_a=imagesize.get(dirs+'/'+image_list[i])
        im_b=imagesize.get(dirs+'/'+image_list[j])
        if im_a == im_b:
          os.remove(dirs + '/' + image_list[j])
          del image_list[j]

checkImages('/content/gdrive/MyDrive/testdata')