Программа для изменения метаданных фотографии
программа должна изменять метаданные изображения, но некоторые значения данных можно записывать только в определенном формате не числом и не строкой, все форматы различных данных указаны в самом коде по #, их я брал с прикрепленного сайта(скрин с сайта ниже), однако как я понял к питону они не относятся и как их записать я не понимаю.Подскажите как привести значение в нужный мне формат на примере ApertureValue(ну и если не трудно другие значения).
import io
from PIL import Image
import piexif
o = io.BytesIO()
thumb_im = Image.open("C:/PythonProject/export.jpg")
thumb_im.thumbnail((50, 50), Image.ANTIALIAS)
thumb_im.save(o, "jpeg")
thumbnail = o.getvalue()
zeroth_ifd = {piexif.ImageIFD.Make: u"Canon",
piexif.ImageIFD.XResolution: (96, 1),
piexif.ImageIFD.YResolution: (96, 1),
piexif.ImageIFD.Software: u"piexif"
#piexif.ImageIFD.Compression: "int16u!",
}
exif_ifd = {piexif.ExifIFD.DateTimeOriginal: u"2099:09:29 10:10:10",
piexif.ExifIFD.DateTimeDigitized: u"2099:09:29 10:10:10",
#piexif.ExifIFD.ApertureValue: rational64u,1.6959938128383605 # Вот это все нужно записать как разные числа в определенном
#piexif.ExifIFD.BrightnessValue: 'rational64s',1.5728160952766375 # формате, тут записаны форматы, я смотрел на сайте который прикрепил
#piexif.ExifIFD.ColorSpace: 'int16u',65535 # но как я понял это вообще к питону не относится, просто как число или стр
#piexif.ExifIFD.ComponentsConfiguration: 'undef[4]!',
#piexif.ExifIFD.ExifVersion: undef,0232
#piexif.ExifIFD.ExposureBiasValue: (0, 0),
piexif.ExifIFD.LensMake: u"LensMake",
piexif.ExifIFD.Sharpness: 65535,
piexif.ExifIFD.LensSpecification: ((1, 1), (1, 1), (1, 1), (1, 1)),
}
gps_ifd = {piexif.GPSIFD.GPSVersionID: (2, 0, 0, 0),
piexif.GPSIFD.GPSAltitudeRef: 1,
piexif.GPSIFD.GPSDateStamp: u"1999:99:99 99:99:99",
}
first_ifd = {piexif.ImageIFD.Make: u"Canon",
piexif.ImageIFD.XResolution: (40, 1),
piexif.ImageIFD.YResolution: (40, 1),
piexif.ImageIFD.Software: u"piexif",
piexif.ImageIFD.DateTime: u"2099:09:29 10:10:10",
}
exif_dict = {"0th":zeroth_ifd, "Exif":exif_ifd, "GPS":gps_ifd, "1st":first_ifd, "thumbnail":thumbnail}
exif_bytes = piexif.dump(exif_dict)
im = Image.open("C:/PythonProject/export.jpg")
im.thumbnail((100, 100), Image.ANTIALIAS)
im.save("C:/PythonProject/modified_export.jpg", exif=exif_bytes)
Ответы (1 шт):
В случае тегов, требующих вещественные значения, последние хранятся в виде двух чисел — числителя и знаменателя дроби. Например, воспользовавшись функцией exiftool -v3 (-verbose3), можно посмотреть, как кодируется тег:
| | 8) MaxApertureValue = 4.4 (44/10)
| | - Tag 0x9205 (8 bytes, rational64u[1]):
| | d60ac: 00 00 00 2c 00 00 00 0a [...,....]
Согласно документации для PiExif, рациональные числа записываются в виде (int, int). Более подробно вы можете прочесть здесь.
