【问题标题】:Best method to save & retrieve images to database将图像保存和检索到数据库的最佳方法
【发布时间】:2014-01-29 16:09:48
【问题描述】:

在上面寻求建议。 希望创建一个 SQLlite DB,其中每行数据主要是字符串,但我还想保存从手机拍摄的图像。

保存位图图像的编码base 64字符串并在调用该行数据时将其转换回图像是否可取或可能?

我还在某处读到有一种 blob 列类型可以保存图像二进制数据。

提前致谢!

干杯

【问题讨论】:

    标签: android image sqlite


    【解决方案1】:

    是的,绝对可以这样做,但您也可以使用 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");
    

    【讨论】:

    • 那么 base64 字符串占用的空间是否比其等效图像少?
    • 不,在大多数情况下(为我不知道的边缘情况腾出空间......),存储原始数据会更小。尽管如此,了解如何存储和转换为 Base64 字符串在其他情况下还是很有用的 - 或者在您无法更改数据库方案的情况下。
    【解决方案2】:

    我自己喜欢使用 BLOB 数据类型。它可能会占用您数据库上的大量空间,但它永远不会失败。您需要将位图图像转换为二进制数据类型 (byte[]) 并将二进制数据存储到数据库中。如果您尝试将 uri 编码为字符串,它将在从数据库中检索图像时给出空结果。参考这个link

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2012-06-19
      • 1970-01-01
      • 2015-03-16
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多