편집 후 이미지를 편집하기 위해 베개를 사용하고 있습니다. 저장 방법은 다음과 같습니다. 파일을 저장하는 데 0.012 초가 소요됩니다. 파일에 저장하지 않고 Image 객체에서 md5를 계산하는 방법이 있습니까?디스크에 저장하지 않고 파일의 md5를 얻습니다.
1
A
답변
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'로 전달할 수 있습니다. –
일종의. PIL 이미지를 [BytesIO] (https://docs.python.org/3/library/io.html#io.BytesIO) 개체에 저장합니다. 이것은 매우 빠릅니다. –
표준 배포의 일부인 hashlib 모듈을 사용하십시오. –