2014-01-10 59 views
3

尋找上面的建議。 想要創建一個SQLlite數據庫,其中每行數據主要是字符串,但我也想保存從手機拍攝的圖像。保存和檢索圖像到數據庫的最佳方法

建議還是可以保存編碼後的位圖圖像的64位字符串,並在調用數據行時將其轉換回圖像?

我也讀過一些地方,有一個blob列類型,可以保存圖像的二進制數據。

在此先感謝!

乾杯

回答

4

是的,這是絕對有可能做到的,但你也可以使用斑點以及(看到這個帖子How to store and retrieve a byte array (image data) to and from a SQLite database?)。但是,如果要將圖像作爲Base64字符串存儲,則很容易,只需使用Apache庫將原始圖像bytes[]編碼爲Base64 String即可。

這裏的參考:Apache Base 64

首先,您要使用public static String encodeBase64String(byte[] binaryData)到圖像編碼bytes[]

然後,您可以將Base64字符串存儲在數據庫中。

當你去檢索圖像,只需使用public static byte[] decodeBase64(String base64Data)String轉換回bytes[],並使用BitmapFactory得到Bitmap

編輯:

與此周圍打了一下,添加核心commons-codec-1.9.jar後由於某種原因,我得到一個java.lang.NoSuchMethodError。如果這個問題不是特定於我的版本,它是一樣的:

String base64string = new String(Base64.encodeBase64(drawable), "UTF-8"); 
+0

那麼base64字符串佔用的空間少於它的圖像等價物嗎? – dancingbush

+0

在大多數情況下(爲我不知道的邊緣情況提供空間...),存儲原始數據將更小。儘管如此,知道如何存儲和轉換Base64字符串還是可以在其他情況下使用 - 也可以在不能更改DB方案的情況下使用。 – Submersed

1

我自己我喜歡使用BLOB數據類型。它可能會佔用數據庫上的很多空間,但它永遠不會失敗。您需要將位圖圖像轉換爲二進制數據類型(byte [])並將二進制數據存儲到數據庫。如果嘗試將uri編碼爲字符串,它將在從數據庫中檢索圖像時產生空結果。請參考link

相關問題