Как изменить название модели камеры изображения с помощью Python - PullRequest
2 голосов
/ 22 октября 2019

Я пытался изменить имя модели камеры, используя библиотеку PIL и piexif для python. Это была успешная попытка, но когда я проверил изображения, размер изображения уменьшился с 8-9 МБ до 1-2 МБ.

Как я могу изменить данные 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)

1 Ответ

0 голосов
/ 23 октября 2019

На самом деле вы не можете достичь своей заявленной цели в процессе работы. Вы читаете изображение, написанное другой неизвестной библиотекой 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.

...