提升下面代码的运行速度:import os from PIL import Image # 定义一个函数,判断图片是否全黑 def is_black_image(filepath): img = Image.open(filepath) width, height = img.size for x in range(width): for y in range(height): pixel = img.getpixel((x,y)) if sum(pixel) != 0: return False return True # 遍历文件夹,判断并删除纯黑照片 def batch_delete_black_images(folder_path): for f in os.listdir(folder_path): file_path = os.path.join(folder_path, f) if os.path.isfile(file_path): if is_black_image(file_path): os.remove(file_path) print('{} has del'.format(file_path)) # 调用函数批量删除 batch_delete_black_images(r'F:\H18\Dfinal640.tif\8-2')
时间: 2024-03-10 21:49:38 浏览: 64
可以尝试以下优化方案:
1. 多进程处理:使用Python的multiprocessing库可以将遍历文件夹、判断是否为纯黑照片和删除操作分别放到不同进程中处理,从而提高处理速度。
2. 缩小图片尺寸:如果图片尺寸非常大,可以先将其缩小到一定程度再进行处理。可以使用Pillow库的thumbnail()函数实现。
3. 减少图片解码次数:在判断图片是否为纯黑色时,可以先将图片解码一次,然后将解码后的像素值保存下来,避免在每次判断时都重新解码。
修改后的代码如下:
```python
import os
from PIL import Image
from multiprocessing import Pool
def is_black_image(file_path):
with Image.open(file_path) as img:
pixels = list(img.getdata())
if all(sum(pixel) == 0 for pixel in pixels):
return True
else:
return False
def delete_black_images(file_path):
if is_black_image(file_path):
os.remove(file_path)
print('{} has del'.format(file_path))
def batch_delete_black_images(folder_path):
file_list = []
for f in os.listdir(folder_path):
file_path = os.path.join(folder_path, f)
if os.path.isfile(file_path):
file_list.append(file_path)
with Pool() as p:
p.map(delete_black_images, file_list)
if __name__ == '__main__':
batch_delete_black_images(r'F:\H18\Dfinal640.tif\8-2')
```
这个修改后的代码使用了多进程处理,并且在判断图片是否为纯黑色时,只解码了一次图片。
阅读全文