2011-10-21 14 views
2

我必須在我的程序中存儲/檢索大量的圖像。 每個圖像都很小:一個圖標50x50,每一個都有一個字符串,它是圖標所關聯的路徑。python:容器來記憶大量的圖像

由於它們非常小,我在考慮是否有一些庫允許將它們全部存儲在一個文件中。 我需要存儲圖像和路徑字符串。

我不知道,如果泡菜是一種可能的選擇 - 我也聽說過要複雜得多庫如HDF5 ...

感謝您的幫助!

亞歷山德羅

回答

0

是不是這可能更容易? (在這裏被盜http://bytes.com/topic/python/answers/44238-pickle-image

import Image, pickle, cStringIO 

i = open('button_home.gif', 'rb') 
i.seek(0) 
w = i.read() 
i.close() 
dic = {'1':w,'2':w,'3':w,'4':w} 

F=open('allicons.dat','w') 
pickle.dump(dic,F) 
F.close() 

#Ok now you take your pickled string and unpickle your object and select 
#the item you want and put it in a cStringIO or StringIO so we can open 
#it directly with PIL. 
F=open('allicons.dat','r') 
o=pickle.load(F) 
F.close() 

one_im = o['1'] 
c = cStringIO.StringIO() 
c.write(one_im) 
c.seek(0) 
im = Image.open(c) 
im.show() 
+0

你可以使用'Image.open(StringIO(one_im))',無需編寫和查找。 – jfs

+0

將圖像插入數據庫並不困難:[''conn.executemany('insert into images(path,image)values(?,?)',dic.items())'](https://gist.github .com/1304181),從數據庫中得到一個知道它的路徑的圖像:'conn.execute('從路徑=?',(路徑)'的圖像中選擇圖像)'。 – jfs

4

sqlite3的模塊中的標準庫將很好地完成這項工作。

這些照片在每個顏色平面2500個位都很小,並且它們可以很容易地作爲blob條目存儲在數據庫中(作爲單個文件存儲)。

+0

你確定嗎?我不知道我之前是否清楚,但是我不僅要存儲文本數據(目錄路徑),還要存儲圖標圖像本身。我不知道sqlite3,但我不知道它是否可以存儲非文本信息... – alessandro

+0

@alessandro是的,你可以在sqlite中存儲blob – hamstergene

+0

ooops我意識到我仍然缺少多少(Python中的新手) ...什麼是blob? (編輯):找到這個http://www.daniweb.com/software-development/python/threads/246207 – alessandro

0

你可以醃製一個字典,將文件名與RGBA數據的字節串相關聯。

假設您已經用PIL加載了圖像,請確保它們具有相同的大小和顏色格式。用images[filename] = im.tostring()構建一個字典,並用pickle轉儲()。使用Image.fromstring以及正確的大小和模式參數將其恢復。