2

我试图使用 python 的 PIL 和 piexif 库更改相机型号名称。这是一次成功的尝试,但是当我检查图像时,图像大小从 8-9 MB 减小到了 1-2 MB。

如何在不更改图像大小的情况下更改 exif 数据?

我的代码如下:

img = Image.open(image_)
exif_dict = piexif.load(img.info['exif'])
exif_dict = piexif.load(image)

#new camera model name
exif_dict['0th'][272] = b'new_camera_model_name'

# Converting to bytes
exif_bytes = piexif.dump(exif_dict)

#Saving Image
img.save(image, exif=exif_bytes)
4

1 回答 1

-1

您实际上无法以您正在进行的方式实现您的既定目标。您正在读取由其他未知 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。

于 2019-10-23T12:03:03.837 回答