如何使用python更改图像的相机型号名称

问题描述 投票:2回答:1

我正尝试使用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)
python image python-imaging-library exif piexif
1个回答
0
投票

您实际上无法以前进的方式实现既定目标。您正在读取由其他未知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绑定,但是我个人只是将Python subprocess与常规的命令行工具一起使用。 YMMV。

© www.soinside.com 2019 - 2024. All rights reserved.