所以几天前我在这里问了这个关于从 android.graphics.Bitmap 对象生成 md5 总和的问题。用户 Leonidos 帮了大忙,他建议的方法很有效。但是我之前使用同一张图片生成的 md5 总和给出了不同的总和。
我正在使用的Android代码如下:
public String md5ForBitmap(Bitmap bitmap)
{
String hash = "";
try
{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapBytes = stream.toByteArray();
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(bitmapBytes);
byte[] digestedBytes = messageDigest.digest();
BigInteger intRep = new BigInteger(1, digestedBytes);
hash = intRep.toString(16);
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return hash;
}
虽然 python 脚本看起来像这样:
def begin(path):
os.chdir(path)
files = glob.glob("*")
for file in files:
processFile(file, path)
def processFile(file, folder):
with open(file, "r") as picture:
fileContents = picture.read()
md5 = hashlib.md5()
md5.update(fileContents)
hash = md5.hexdigest()
print file + " : " + hash
Android 应用程序从服务器接收一个 json 字符串,其中包含图像的 url 和 md5 总和。md5 的总和是事先用 python 脚本计算出来的。下载图像后,我留下了一个 Bitmap 对象,然后我在应用程序中使用该对象。
Leonidos 建议 Bitmap 对象的处理方式与 python 处理图像数据的方式不同,我需要在 Android 中找到原始图像数据的 md5 和。这听起来,对我来说,是一个完全合理的解释。只是当谈到这一切时,我真的很迷茫。
那么正确的方法是什么?