2014-01-10 81 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

相关问题