【问题标题】:How to store image in Database?如何将图像存储在数据库中?
【发布时间】:2014-07-29 20:57:25
【问题描述】:

我需要存储从图库中选择的数据库图像。我的第一个想法是将位图转换为字符串并将字符串存储在数据库中,但现在我正在阅读其他帖子:saving image clicked from camera or loaded from gallery in database and retrieving it,并且建议使用字节数组。 有人可以解释一下我的区别,哪个想法更好?也许还有别的? 我刚开始,但我想写得可能正确。

【问题讨论】:

  • 您可以将图像存储在服务器上并将图像的 URL 存储在数据库中吗?
  • 在这种情况下,我更喜欢将所有图像保存在我的数据库中

标签: android database bitmap


【解决方案1】:

将图像作为byte[] 存储在BLOB 字段中的标准方式。另一种可能性 - 有一些开销 - 是存储 Base64 编码的字符串。

【讨论】:

  • 感谢您的评论。我想知道我应该选择哪一个。你说的具体开销是多少?
  • 好吧,Base64 将 3 个字节编码为 4 个字节,因此开销为 25%。
  • Base64 的好处是,编码后的字符串可以安全地通过网络传输,接收端不会出现编码或格式冲突
  • 好的。也许这是另一个问题的情况,但你能告诉我吗,这样做我会复制数据。但是,例如仅保存图像所在的包,我可能会从内存中删除照片并且无法访问。我的项目包含很多照片,所以我想知道哪个想法最好
  • 我认为您引用的帖子对您​​的情况来说已经足够了。 “重复数据”和“只保存包”是什么意思?
【解决方案2】:

您可以使用 Base64 Android 类:

 String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);

不过,您必须将图像转换为字节数组。这是一个例子:

  Bitmap bm = BitmapFactory.decodeFile("/path/to/image.jpg");
  ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object   
  byte[] b = baos.toByteArray(); 

如果您使用的是较旧的 SDK 库(因为您希望它在具有较旧版本操作系统的手机上工作),您将不会打包 Base64 类(因为它只是在 API 级别 8 又名版本中出现2.2)。

查看这篇文章以了解解决方法:

http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 2012-06-08
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多