Вы добавляете свои данные к существующему объекту BytesIO
. Дополнительные записи в такой объект не заменяют существующие данные; Запись добавляет дополнительные данные в конец файла:
>>> from io import BytesIO
>>> out = BytesIO()
>>> out.write(b'123')
3
>>> out.getvalue()
b'123'
>>> out.write(b'456')
3
>>> out.getvalue()
b'123456'
Теперь у вас есть двоичные данные для двух изображений в одном файле, но совместимые декодеры будут игнорировать конечные данные в файле изображения.
Использовать новый, пустой BytesIO()
объект:
resized = BytesIO()
img.save(resized, format="PNG")
contents = resized.getvalue()
Вы также можете искать начало файла и усекать:
output.seek(0)
output.truncate()
перед повторной записью в него, но простое создание нового объекта файла в памяти является более понятным и менее подверженным ошибкам.