В большинстве случаев ваши test1.jpg
и test2.jpg
изображения будут немного отличаться.Это означает, что потеря информации, хранящейся в test1.jpg, произойдет после того, как вы откроете (распакуете) и сохраните ее (снова сжали) со сжатием JPEG с потерями.
В некоторых случаях, тем не менее, открытие и сохранение изображения JPEG с таким жепрограммное обеспечение не вносит никаких изменений.
Взгляните на этот пример:
from PIL import Image
import os
import hashlib
def md5sum(fn):
hasher = hashlib.md5()
with open(fn, 'rb') as f:
hasher.update(f.read())
return hasher.hexdigest()
TMP_FILENAME = 'tmp.jpg'
orig = Image.open(INPUT_IMAGE_FILENAME)
orig.save(TMP_FILENAME) # first JPG compression, standard quality
d = set()
for i in range(10000):
# Compute file statistics
file_size = os.stat(TMP_FILENAME).st_size
md5 = md5sum(TMP_FILENAME)
print ('Step {}, file size = {}, md5sum = {}'.format(i, file_size, md5))
if md5 in d: break
d.add(md5)
# Decompress / compress
im = Image.open(TMP_FILENAME)
im.save(TMP_FILENAME, quality=95)
Он будет открывать и сохранять файл JPG несколько раз, пока не будет найден цикл (то есть, открытое изображение имеет точноте же данные, что и раньше).
В моем тестировании для достижения устойчивого состояния требуется от 50 до 700 циклов (когда открытие и сохранение изображения не приводит к потерям).Однако окончательное «устойчивое» изображение заметно отличается от оригинала.
Изображение после первого сжатия JPG:
![Coke can lying on a beach in Ukraine](https://i.stack.imgur.com/Z5vB8.jpg)
Resulting "устойчивое изображение после 115 циклов сжатия / распаковки:
![Coke can lying on a beach in Ukraine (faded colors, lost sharpness)](https://i.stack.imgur.com/pKd5x.jpg)
Пример вывода:
Step 0, file size = 38103, md5sum = ea28705015fe6e12b927296c53b6d147
Step 1, file size = 71707, md5sum = f5366050780be7e9c52dd490e9e69316
...
Step 113, file size = 70050, md5sum = 966aabe454aa8ec4fd57875bab7733da
Step 114, file size = 70050, md5sum = 585ecdd66b138f76ffe58fe9db919ad7
Step 115, file size = 70050, md5sum = 585ecdd66b138f76ffe58fe9db919ad7
Так что, хотя я использовал относительновысокое качество настройки 95, как вы можете видеть, многократное многократное сжатие / декомпрессия заставило изображение терять свои цвета и резкость.Даже при настройке качества 100 результат будет очень похожим, несмотря на почти вдвое больший размер файла.