PILL图像检索exif dict从base64转换图像进行编辑和保存错误,dict返回为空,有什么想法吗?

2024-04-29 06:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来问问题的,我希望这些信息是你所需要的一切,以正确理解问题。提前感谢您抽出时间回答这个问题。在

ENV:Python 2.7.6, 枕头3.4.2, 第1.0.8页

我有一个小脚本将一个映像从basex64转换成映像文件;在执行数组的for循环时,映像被正确地保存在服务器上

 # write decoded image from base to jpg, works perfectly
 fh = open(image_name_location, "wb")
 fh.write(decodestring(image_src))
 fh.close() 

在这之后,我希望相同的图像在exif中插入gps和日期信息,因此为此我使用PIL和piexif;我使用PIL来跟踪当前的exif和piexif来将新数据插入到图像的exif中

^{pr2}$

错误是,无论我做什么,以及我试图获取EXIF current dict,它都将返回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}

这解决了零误差,因为它有exif clean if none,但是现在我得到了把gps数据从float转换成touple时的piexif错误??在


Tags: 图像imageforclosedatetimedatedictgps
1条回答
网友
1楼 · 发布于 2024-04-29 06:27:42

最后的解决方案是,如果没有exif,那么pilexif库很难检索到任何关于exif的信息,但是piexif库的工作原理非常出色,如果没有找到exif,甚至会创建一个空的exif。

添加以下代码以替换exif计算:

            exif_dict = piexif.load(image_name_location)

            #convert GPS to degree, minutes, seconds for touple
            latitude_coo = Latitude(image_gps.split(',')[0]).to_string('d% %M% %S% %H').split()
            longitude_coo = Longitude(image_gps.split(',')[1]).to_string('d% %M% %S% %H').split()

            gps_ifd = {piexif.GPSIFD.GPSVersionID: (2, 0, 0, 0),
                       piexif.GPSIFD.GPSAltitudeRef: 1,
                       piexif.GPSIFD.GPSLatitude: ((int(latitude_coo[0]),1),(int(float(latitude_coo[1])*100),100),(int(float(latitude_coo[2])*100),100)),
                       piexif.GPSIFD.GPSLatitudeRef: latitude_coo[3],
                       piexif.GPSIFD.GPSLongitude: ((int(longitude_coo[0]),1),(int(float(longitude_coo[2])*100),100),(int(float(longitude_coo[2])*100),100)),
                       piexif.GPSIFD.GPSLongitudeRef: longitude_coo[3]
                       }

            #insert new information for gps and date
            exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal]= datetime.datetime.strptime(image_date, '%d/%m/%Y %H:%M').strftime("%Y:%m:%d %H:%M:%S")
            exif_dict['Exif'][piexif.ExifIFD.DateTimeDigitized]= datetime.datetime.now().strftime("%Y:%m:%d %H:%M:%S")
            exif_dict['0th'][piexif.ImageIFD.Make]= "Your test here"
            exif_dict['0th'][piexif.ImageIFD.Software]= "the software name"
            exif_dict['0th'][piexif.ImageIFD.DateTime]= datetime.datetime.strptime(image_date, '%d/%m/%Y %H:%M').strftime("%Y:%m:%d %H:%M:%S")
            exif_dict['GPS'] = gps_ifd

            #convert exif to bytes
            exif_bytes = piexif.dump(exif_dict)

            #add to the image
            piexif.insert(exif_bytes, image_name_location)

还使用了这个库https://pypi.python.org/pypi/LatLon/1.0.2从lat,lon google格式获得坐标,到度,分,秒,参考,并根据这本书的GPS Touple格式说明应用:http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf

这是值得的:p

相关问题 更多 >