Я извлекаю все теги EXIF и XMP из изображений tif, используя следующий код, который использует pyexiv2
:
import pyexiv2
image = r'image.tif'
meta = pyexiv2.ImageMetadata(image)
meta.read()
# print all exif tags in file
for m in meta.exif_keys:
print(m + " = " + str(meta[m]))
print "\n"
# print all xmp tags in file
for m in meta.xmp_keys:
print(m + " = " + str(meta[m]))
# look for an individual tag and value
if 'Xmp.Camera.BandSensitivity' in meta.xmp_keys:
sense = meta['Xmp.Camera.BandSensitivity'].value # append value to list
print "The band sensitivity is: ", sense
Код выполняется, но я не получаю никакой информации о типе значения XMP. Например, для EXIF некоторые типы значений включают в себя: [Ascii]
, [Long]
, [Rational]
. И это отражено в распечатке:
Exif.Photo.ExposureTime = <Exif.Photo.ExposureTime [SRational] = 5921/10000000>
Exif.Photo.FNumber = <Exif.Photo.FNumber [Rational] = 1800/1000>
Exif.Photo.DateTimeOriginal = <Exif.Photo.DateTimeOriginal [Ascii] = 2017:07:12 10:27:03>
Exif.Photo.FocalLength = <Exif.Photo.FocalLength [Rational] = 3600/1000>
Exif.Photo.SubSecTimeOriginal = <Exif.Photo.SubSecTimeOriginal [Ascii] = 396473888>
Exif.Photo.PixelXDimension = <Exif.Photo.PixelXDimension [Short] = 1280>
Exif.Photo.PixelYDimension = <Exif.Photo.PixelYDimension [Short] = 960>
Но для тегов XMP я не получаю никакой информации о типе значения:
Xmp.Camera.CalibrationTargetName = <Xmp.Camera.CalibrationTargetName [] = Mire 3>
Xmp.Camera.CalibrationPicture = <Xmp.Camera.CalibrationPicture [] = 0>
Xmp.Camera.Yaw = <Xmp.Camera.Yaw [] = -95.772>
Xmp.Camera.Pitch = <Xmp.Camera.Pitch [] = 9.17662>
Xmp.Camera.Roll = <Xmp.Camera.Roll [] = -8.29878>
Xmp.Camera.GPSXYAccuracy = <Xmp.Camera.GPSXYAccuracy [] = 139200/100000>
Xmp.Camera.GPSZAccuracy = <Xmp.Camera.GPSZAccuracy [] = 149600/100000>
Я могу преодолеть эту проблему, преобразовав значение XMP в строку и используя string.strip()
для извлечения числового значения. Однако это не идеально и может привести к ошибке, если формат строки изменяется.
Вопрос: кто-нибудь сталкивался с этой проблемой раньше с тегами XMP от pyexiv2? Есть ли способ включить информацию о типе значения в теги XMP, как в случае с тегами EXIF здесь?
ПРИМЕЧАНИЕ. Я пробовал это с несколькими TIFF-изображениями, и у меня все еще возникает та же проблема. Используя версию 0.3.2 pyexiv2
. Кроме того, .raw_value
дает те же проблемы, что и .value
(как используется в приведенном выше коде.