【问题标题】:Generate a md5 sum from an Android Bitmap object从 Android 位图对象生成 md5 和
【发布时间】:2013-03-01 13:13:54
【问题描述】:

我花了几个小时试图弄清楚如何做到这一点。我已经在 stackoverflow 和文档上阅读了一个又一个帖子。

我有一个 android.graphics.Bitmap 对象,我需要得到它的 md5 总和。在我想验证它尚未保存到文件系统的总和时。我已经看到了几种对 java.io.File 对象执行此操作的方法。我只需要一个接收 Bitmap 对象并将十六进制 md5 和作为字符串返回的函数。

这可能已经在某处得到解决,但如果是这样,我无法理解它或从中推断出如何做到这一点。

方法当然是资源越少越好。

【问题讨论】:

标签: java android bitmap md5


【解决方案1】:

获取位图的字节以计算 md5。

Bitmap bm = ... // your bitmap
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object   
byte[] bitmapBytes = baos.toByteArray();

所以你现在有了字节数组。您可以在 android here 中找到如何获取字节数组的 md5 哈希。

【讨论】:

  • 这个实现似乎有效,它至少给了我一个看起来合法的字符串。它没有给我我之前使用相同图像在 python 中生成的相同值。我怀疑它可能与时间戳有关,或者我需要在 python 中以某种方式生成它。感谢您的回答。
  • 你最好得到图像原始数据的md5,而不是android的位图。无法保证 android 和 python 威胁的图像方式相同。
  • 对从位图文件中获取原始数据有什么建议吗?
  • 什么是位图文件?如果是普通文件,则以二进制模式打开并读取所有字节。这个字节数组在 python 和 android 中应该是相同的,所以你会得到相同的哈希值。
  • 这是我的问题。我不知道这一切意味着什么。 Bitmap 不是 File 对象,所以我不能以这种方式使用它。以二进制模式打开是什么意思?我从服务器接收位图,Android 自动创建文件。我是否需要将其保存到手机中,然后以二进制模式将其作为文件从存储中打开?对不起,但我感到很失落......
【解决方案2】:

我不是 Android 开发人员,但我在 API 参考 (http://developer.android.com/reference/android/graphics/Bitmap.html) 中看到有以下方法:

  • 获取位图大小:getWidth, getHeight
  • 将像素作为整数数组获取:getPixels

因此您可以创建一个所需大小的数组,然后读取所有像素,并将该数组转换为 byte[]。

那么从中计算md5 sum应该是没有问题的。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2019-11-30
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多