【发布时间】:2014-01-29 16:09:48
【问题描述】:
在上面寻求建议。 希望创建一个 SQLlite DB,其中每行数据主要是字符串,但我还想保存从手机拍摄的图像。
保存位图图像的编码base 64字符串并在调用该行数据时将其转换回图像是否可取或可能?
我还在某处读到有一种 blob 列类型可以保存图像二进制数据。
提前致谢!
干杯
【问题讨论】:
在上面寻求建议。 希望创建一个 SQLlite DB,其中每行数据主要是字符串,但我还想保存从手机拍摄的图像。
保存位图图像的编码base 64字符串并在调用该行数据时将其转换回图像是否可取或可能?
我还在某处读到有一种 blob 列类型可以保存图像二进制数据。
提前致谢!
干杯
【问题讨论】:
是的,绝对可以这样做,但您也可以使用 Blob(请参阅这篇文章 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");
【讨论】:
我自己喜欢使用 BLOB 数据类型。它可能会占用您数据库上的大量空间,但它永远不会失败。您需要将位图图像转换为二进制数据类型 (byte[]) 并将二进制数据存储到数据库中。如果您尝试将 uri 编码为字符串,它将在从数据库中检索图像时给出空结果。参考这个link
【讨论】: