それで、数日前、私はandroid.graphics.Bitmapオブジェクトからmd5合計を生成することについてSOでこの質問をしました。ユーザー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アプリは、画像へのURLとmd5の合計を含むjson文字列をサーバーから受け取ります。md5の合計は、事前にpythonスクリプトを使用して計算されています。画像がダウンロードされた後、アプリで使用するBitmapオブジェクトが残ります。
Leonidosは、BitmapオブジェクトはPythonが画像データを処理するのと同じように処理されないこと、そしてAndroidで生の画像データのmd5合計を見つける必要があることを示唆しました。この音は、私にとって、完全にもっともらしい説明であると思います。これらすべてに関して、私は本当に本当に迷っています。
では、これを行う正しい方法は何ですか?