您实际上无法以您正在进行的方式实现您的既定目标。您正在读取由其他未知 JPEG 库编写的图像并将其写出,可能使用 PIL 在幕后使用的 JPEG 库的不同质量值。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 绑定,但我个人只会使用subprocess带有常规命令行工具的 Python。YMMV。