写了一些代码来浏览200个图像的文件夹,以获得图像中最小像素数的值(即最小宽度和高度)
但我一直收到这个错误:
File "pixelSizeCheck.py", line 9, in get_num_pixels
width, height = Image.open(open(filepath)).size
IsADirectoryError: [Errno 21] Is a directory:
当我运行此代码时:
from PIL import Image
import os.path
def get_num_pixels(filepath):
heightMin= 10000
widthMin= 10000
for filename in os.listdir(filepath):
if filename.endswith(".jpg") :
width, height = Image.open(open(filepath)).size
if width< widthMin:
widthMin = width
return widthMin
if height < heightMin:
heightMin = height
return heightMin
print (heightMin, widthMin)
get_num_pixels("filepath")
但是我用print语句测试了代码,我知道我输入的目录是正确的,因为它正确到达for循环但是当我尝试赢得第9行时崩溃:
Image.open(open(filepath)).size
我也是python的新手,所以对于如何改进代码的任何建议都会非常感激。如果任何代码草率或差,请提前道歉。
答案 0 :(得分:1)
您正试图打开您正在扫描的目录:Image.open
来电:
open(filepath)
应该是(第二个错误是你必须以二进制模式打开)
open(os.path.join(filepath,filename),"rb")
更好的方法是使用glob.glob
过滤和同时获取绝对路径:
for filename in os.listdir(filepath):
if filename.endswith(".jpg") :
width, height = Image.open(open(os.path.join(filepath,filename),"rb")).size
将成为(添加一个上下文管理器以确保文件已关闭):
for filename in glob.glob(os.path.join(filepath,"*.jpg")):
with open(filename,"rb") as f:
width, height = Image.open(f).size