Я новичок в задании вопросов здесь, я надеюсь, что эта информация - все, что вам нужно, чтобы правильно понять проблему. Заранее благодарю вас за ваше время, отвечая на это.PILL Изображение извлекает exif dict из base64 преобразованных изображений для редактирования и сохранения ошибки, dict return NULL, любые идеи?
ENV: Python 2.7.6, Подушка 3.4.2, Piexif 1.0.8
У меня есть небольшой скрипт, чтобы преобразовать изображение из base_64 в файл изображения; Изображение правильно сохраняется на сервере при выполнении цикла for для массива;
# write decoded image from base to jpg, works perfectly
fh = open(image_name_location, "wb")
fh.write(decodestring(image_src))
fh.close()
После этого я хочу то же самое изображение, чтобы вставить GPS и дата информации внутри EXIF, поэтому для этого я использую PIL и piexif; Я использую PIL для извлечения текущего exif и piexif для вставки новых данных в exif изображения;
im = Image.open(image_name_location)
#load existing exif to use as carrier
exif_dict = piexif.load(im.info["exif"])
#insert new information for gps and date
exif_dict['GPS']['Latitude']= float(image_gps.split(',')[0])
exif_dict['GPS']['Longitude']= float(image_gps.split(',')[1])
exif_dict['0th']['Date and time (digitized)']= datetime.datetime.strptime(image_date, '%d/%m/%Y %H:%M').strftime("%Y:%m:%d %H:%M:%S")
#convert exif to bytes
exif_bytes = piexif.dump(exif_dict)
#add to the image
piexif.insert(exif_bytes, image_name_location)
#close the image from memory
im.close()
Ошибка, что я делаю, и каким-либо образом я пытаюсь получить текущее Dict EXIF, он возвращает NULL;
У кого-нибудь есть идеи? Нужно упомянуть, на существующих изображениях, после того, как они были загружены в html, этот скрипт отлично работает, но по какой-то причине, при создании изображений это не так.
я изменил и добавил этот код, чтобы получить Exif:
try:
exif_dict = piexif.load(im.info["exif"])
#insert new information for gps and date
exif_dict['GPS']['Latitude']= str(image_gps.split(',')[0])
exif_dict['GPS']['Longitude']= str(image_gps.split(',')[1])
exif_dict['0th']['Date and time (digitized)']= datetime.datetime.strptime(image_date, '%d/%m/%Y %H:%M').strftime("%Y:%m:%d %H:%M:%S")
#close the image from memory
im.close()
except:
#create clean exif info for new image if none detected
zeroth_ifd = {piexif.ImageIFD.Make: "Image maker",
piexif.ImageIFD.Software: "software here"
}
exif_ifd = {piexif.ExifIFD.DateTimeOriginal: datetime.datetime.strptime(image_date, '%d/%m/%Y %H:%M').strftime("%Y:%m:%d %H:%M:%S"),
piexif.ExifIFD.DateTimeDigitized: datetime.datetime.now().strftime("%Y:%m:%d %H:%M:%S")
}
gps_ifd = {piexif.GPSIFD.GPSVersionID: (2, 0, 0, 0),
piexif.GPSIFD.GPSAltitudeRef: 1,
piexif.GPSIFD.GPSLatitude: float(Fraction(str(image_gps.split(',')[0]))),
piexif.GPSIFD.GPSLongitude: float(Fraction(str(image_gps.split(',')[1])))
}
exif_dict = {"0th":zeroth_ifd, "Exif":exif_ifd, "GPS":gps_ifd}
Это решает ошибку NULL, потому что он имеет Exif чистые, если ни один, но теперь я получаю сообщение об ошибке piexif на преобразование GPS данные от поплавка до touple?
теперь после вар дамп Информация об изображении непосредственно это то, что я получаю: – Thanatos11th
'{ "JFIF": 258, "jfif_unit": 0, «прогрессивный»: 1, «progression»: 1, «jfif_version»: [1, 2], «jfif_density»: [1, 1]} ' – Thanatos11th