2017-10-01 6 views
1

편집 후 이미지를 편집하기 위해 베개를 사용하고 있습니다. 저장 방법은 다음과 같습니다. 파일을 저장하는 데 0.012 초가 소요됩니다. 파일에 저장하지 않고 Image 객체에서 md5를 계산하는 방법이 있습니까?디스크에 저장하지 않고 파일의 md5를 얻습니다.

+1

일종의. PIL 이미지를 [BytesIO] (https://docs.python.org/3/library/io.html#io.BytesIO) 개체에 저장합니다. 이것은 매우 빠릅니다. –

+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과 같은 간단한 것을 사용합니다. IO를 실제로 수행하지 않으면 이미지 압축만으로 해싱 속도가 느려질 수 있습니다. –

+1

@MatteoItalia 좋은 지적이지만 OP가 전체 파일 데이터의 MD5 해시를 원한다고 생각됩니다. 그렇지 않으면, 그는'Image.tobytes' (아니면'Image.getdata')에서 원시 이미지 데이터를'hashlib.md5'로 전달할 수 있습니다. –