从Android Bitmap对象生成md5摘要

4
我花费了几个小时来尝试解决这个问题。我在stackoverflow和文档中阅读了许多帖子。
我有一个android.graphics.Bitmap对象,我需要获取它的md5值。在我想要验证md5值的时候,它还没有保存到文件系统中。我已经看到了一些处理java.io.File对象的方法。我只需要一个接收Bitmap对象并返回十六进制md5值的函数。
也许这个问题已经被解决过了,但我无法理解或推断出如何解决它。
当然,方法越节省资源越好。

1
看看这个是否有帮助:https://dev59.com/gm865IYBdhLWcg3wM7u0 - Mohammad Haseeb
2个回答

9

获取位图字节以计算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();

现在你有一个字节数组。你可以在安卓中找到如何获取字节数组的MD5哈希值,请点击这里


这个实现似乎有效,至少给了我一个看起来合法的字符串。它没有给我用相同图片在Python中预先生成的值一样的结果。 我怀疑这可能与时间戳有关,或者我需要在Python中以不同的方式生成它。 感谢您的回答。 - Bjorninn
1
最好获取图像的原始数据的MD5值,而不是Android的Bitmap。不能保证Android和Python以相同的方式处理图像。 - Leonidos
有没有关于如何从位图文件中获取原始数据的建议? - Bjorninn
1
位图文件是什么?如果它是一个普通的文件,那么以二进制模式打开,并读取所有字节。这个字节数组应该在Python和Android中相同,所以你会得到相同的哈希值。 - Leonidos
这是我的问题。我不知道所有这些意味着什么。Bitmap不是File对象,所以我不能以那种方式使用它。打开二进制模式是什么意思?我从服务器接收位图,Android会自动创建文件。我需要将其保存到手机上,然后以二进制模式从存储中打开它作为文件吗?抱歉,但我感到很迷茫... - Bjorninn
很难拒绝看到你的代码(Android/Python)。如果您无法获得相同的哈希值,请再问一个问题并提供更多细节。 - Leonidos

0

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

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

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

然后,从中计算md5摘要应该不是问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接