我必須在我的程序中存儲/檢索大量的圖像。 每個圖像都很小:一個圖標50x50,每一個都有一個字符串,它是圖標所關聯的路徑。python:容器來記憶大量的圖像
由於它們非常小,我在考慮是否有一些庫允許將它們全部存儲在一個文件中。 我需要存儲圖像和路徑字符串。
我不知道,如果泡菜是一種可能的選擇 - 我也聽說過要複雜得多庫如HDF5 ...
感謝您的幫助!
亞歷山德羅
我必須在我的程序中存儲/檢索大量的圖像。 每個圖像都很小:一個圖標50x50,每一個都有一個字符串,它是圖標所關聯的路徑。python:容器來記憶大量的圖像
由於它們非常小,我在考慮是否有一些庫允許將它們全部存儲在一個文件中。 我需要存儲圖像和路徑字符串。
我不知道,如果泡菜是一種可能的選擇 - 我也聽說過要複雜得多庫如HDF5 ...
感謝您的幫助!
亞歷山德羅
是不是這可能更容易? (在這裏被盜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()
的sqlite3的模塊中的標準庫將很好地完成這項工作。
這些照片在每個顏色平面2500個位都很小,並且它們可以很容易地作爲blob條目存儲在數據庫中(作爲單個文件存儲)。
你確定嗎?我不知道我之前是否清楚,但是我不僅要存儲文本數據(目錄路徑),還要存儲圖標圖像本身。我不知道sqlite3,但我不知道它是否可以存儲非文本信息... – alessandro
@alessandro是的,你可以在sqlite中存儲blob – hamstergene
ooops我意識到我仍然缺少多少(Python中的新手) ...什麼是blob? (編輯):找到這個http://www.daniweb.com/software-development/python/threads/246207 – alessandro
你可以醃製一個字典,將文件名與RGBA數據的字節串相關聯。
假設您已經用PIL加載了圖像,請確保它們具有相同的大小和顏色格式。用images[filename] = im.tostring()
構建一個字典,並用pickle轉儲()。使用Image.fromstring
以及正確的大小和模式參數將其恢復。
你可以使用'Image.open(StringIO(one_im))',無需編寫和查找。 – jfs
將圖像插入數據庫並不困難:[''conn.executemany('insert into images(path,image)values(?,?)',dic.items())'](https://gist.github .com/1304181),從數據庫中得到一個知道它的路徑的圖像:'conn.execute('從路徑=?',(路徑)'的圖像中選擇圖像)'。 – jfs