На самом деле вы не можете достичь своей заявленной цели в процессе работы. Вы читаете изображение, написанное другой неизвестной библиотекой JPEG, и записываете его, возможно, используя другое значение качества с библиотекой JPEG, которую PIL использует под обложками. Стандарт JPEG позволяет кодировщикам / декодерам изображений использовать различные уровни точности и обеспечивать различные компромиссы между точностью, размером изображения и скоростью, поэтому маловероятно, что 2 кодера JPEG будут иметь один и тот же результат - даже разные версии одной и той же библиотеки могут кодироватьиначе.
Итак, если вы действительно хотите изменить свои метаданные без изменения качества изображения, вам будет лучше использовать инструмент, такой как exiftool
, который не декодирует и не перекодирует ваши данные. В командной строке вы должны использовать:
exiftool -Model='My Funky Camera' image.jpg
Затем вы можете увидеть новый параметр с помощью:
exiftool image.jpg
ExifTool Version Number : 11.11
File Name : image.jpg
Directory : .
File Size : 105 kB
File Modification Date/Time : 2019:10:23 12:54:34+01:00
File Access Date/Time : 2019:10:23 12:54:35+01:00
File Inode Change Date/Time : 2019:10:23 12:54:34+01:00
File Permissions : rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Exif Byte Order : Big-endian (Motorola, MM)
Camera Model Name : My Funky Camera <--- HERE IT IS
X Resolution : 1
Y Resolution : 1
Resolution Unit : None
...
...
Megapixels : 1.6
Существует привязка Python, но лично я бы просто использовал Pythonsubprocess
с помощью обычного инструмента командной строки. YMMV.