我试图使用PIL和python的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)
答案 0 :(得分: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。