Данные изображения не текст , не открывать изображения в текстовом режиме.Не для чтения и не для записи.
В Python вы открываете файлы в одном из двух режимов: текстовом и двоичном, используя t
или b
в аргументе mode
.Если вы не используете ни один, подразумевается t
.
Текстовый режим - это просто дополнительный слой поверх двоичного режима, где двоичные данные переводятся из и в текст , используя стандартный текстовый кодек .Подавляющее большинство графических форматов, включая PNG, не являются текстовыми форматами, и вы не можете декодировать их данные с помощью текстового кодека.
Поэтому всегда открывайте их в двоичном режиме, добавляя символ b
врежим файла:
with open('GA-image test.png', 'rb') as image_file:
image_bytes = image_file.read()
with open('GA-image test2.png', 'wb') as output_file:
output_file.write(image_bytes)
Текстовые кодеки - это только одна форма хранения информации в виде последовательности байтов, форматы изображений, такие как PNG, являются другой и не предназначены для того, чтобы иметь значение в виде текста.То, что вы всегда можете декодировать данные изображения, так как Latin-1 является совпадением , случайностью того, как разработан кодек Latin-1, а не преднамеренным.
В качестве примечания:обычно плохая идея использовать except
, так как она перехватывает все исключения, а не только ошибки при открытии файла или ошибки декодирования, которые всегда будут возникать из-за попытки чтения данных PNG как UTF-8.Используйте конкретные исключения, где это возможно.