我有一個包含許多影像的檔案夾,我只想顯示 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)
uj5u.com熱心網友回復:
獲取檔案大小
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 張影像,那么更快的可能是首先獲取隨機檔案名,然后只處理這些檔案名。
uj5u.com熱心網友回復:
你可以做這樣的事情
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]
現在你有了包含檔案名和檔案大小的陣列,希望你知道從那里做什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434241.html
