2017-10-01 22 views
1

私は編集後に画像を編集するために枕を使用しています。保存したファイルにmd5メソッドを使用します。ファイルを保存するのに0.012秒かかります。私は長すぎます。ファイルに保存してImageオブジェクトのmd5をカウントする方法はありますか?ディスクに保存せずにファイルのmd5を取得する

+1

並べ替え[BytesIO](https://docs.python.org/3/library/io.html#io.BytesIO)オブジェクトにPILイメージを保存します。これは非常に高速です。 –

+0

標準配布の一部であるhashlibモジュールを使用します。 –

答えて

3

BytesIOオブジェクトを使用してファイルをディスクに保存せずにファイルデータのMD5チェックサムを取得する方法を簡単に説明します。

from hashlib import md5 
from io import BytesIO 
from PIL import Image 

size = 128 
filetype = 'png' 

# Make a simple test image 
img = Image.new('RGB', (size, size), color='red') 
#img.show() 

# Save it to a fake file in RAM 
img_bytes = BytesIO() 
img.save(img_bytes, filetype) 

# Get the MD5 checksum of the fake file 
md5sum = md5(img_bytes.getbuffer()) 
print(md5sum.hexdigest()) 

#If we save the data to a real file, we get the same MD5 sum on that file 
#img.save('red.png') 

出力

af521c7a78abb978fb22ddcdfb04420d 

我々はアンコメントimg.save('red.png')、その後、標準のmd5sumプログラムに'red.png'を渡す場合は、我々は同じ結果を得ます。

+0

画像を一意に識別するためのハッシングが必要な場合は、pngを避け、pbmのような簡単な方法を使用します。 –

+1

@MatteoItalia良い点ですが、OPがフルファイルデータのMD5ハッシュを望んでいると思われます。さもなければ、彼は 'Image.tobytes'(あるいは' Image.getdata')から生のイメージデータを 'hashlib.md5'に渡すことができます。 –

関連する問題