如何在 Python 中显示图像大小和文件名以及图像?

How to display image size and file name along with image in Python?

我有一个包含许多图像的文件夹,我只想显示 5 个具有大小和文件名的随机图像。到目前为止,我可以显示图像,但不确定如何添加大小和文件名。

images = [ PIL.Image.open(f) for f in glob("/content/gdrive/pics/*.jpg") ]
def imgmap(im):
    if im.mode != 'RGB':
        im = im.convert(mode='RGB')
    return np.fromstring(im.tobytes(), dtype='uint8').reshape((im.size[0], im.size[1], 3))

np_images = [ imgmap(im) for im in images ]

visualize = random.sample(np_images, 5)
for img in visualize:
    plt.figure()
    plt.imshow(img)

你可以这样做

files = glob("/content/gdrive/pics/*.jpg")

然后

fileNames = [os.path.basename(path) for path in files]

fileSizes = [os.stat(path).st_size for path in files]

现在你有了包含文件名和文件大小的数组,希望你知道从那里要做什么。

获取文件大小

size = os.stat(f).st_size

获取没有目录的文件名

filename = os.path.basename(f)

你应该创建元组 (img, filename, size)

images = [ (PIL.Image.open(f).convert('RGB'), 
            os.path.basename(f), 
            os.stat(f).st_size)
                 for f in glob("/content/gdrive/pics/*.jpg") ]

在我的电脑上 plt.imshow() 可以显示 PIL.Image 所以我不必转换为 np.array。但是如果你需要转换那么你可以在创建元组时进行转换。

images = [ (imgmap(PIL.Image.open(f).convert('RGB')),
            os.path.basename(f), 
            os.stat(f).st_size)
                 for f in glob("/content/gdrive/pics/*.jpg") ]

稍后你可以把它们放在一起

visualize = random.sample(images, 5)

for img, name, size in visualize:
    plt.figure()
    plt.imshow(img)
    plt.title(f"{name} - {size} bytes")

编辑:

代码可以更具可读性

def process(path):
    img = imgmap(PIL.Image.open(path).convert('RGB'))
    name = os.path.basename(path)
    size = os.stat(path).st_size
    return (img, name, size)

images = [ process(f) for f in glob("/content/gdrive/pics/*.jpg") ]

坦率地说,如果您只需要 5 张图像,那么可以先获取随机文件名,然后只处理这些文件名。