Exemplo n.º 1
0
def set_gps_location(file_name, lat, lng):
    """Adds GPS position as EXIF metadata
    Keyword arguments:
    file_name -- image file
    lat -- latitude (as float)
    lng -- longitude (as float)
    """
    lat_deg = to_deg(lat, ["S", "N"])
    lng_deg = to_deg(lng, ["W", "E"])

    print(lat_deg)
    print(lng_deg)

    # convert decimal coordinates into degrees, munutes and seconds
    exiv_lat = (pyexiv2.Rational(lat_deg[0]*60+lat_deg[1],60),pyexiv2.Rational(lat_deg[2]*100,6000), pyexiv2.Rational(0, 1))
    exiv_lng = (pyexiv2.Rational(lng_deg[0]*60+lng_deg[1],60),pyexiv2.Rational(lng_deg[2]*100,6000), pyexiv2.Rational(0, 1))
    metadata = pyexiv2.ImageMetadata(file_name)
    metadata.read()

##    exif_keys = metadata.exif_keys

    metadata["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    metadata["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    metadata["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    metadata["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    metadata["Exif.Image.GPSTag"] = 654
    metadata["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    metadata["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

    metadata.write()
Exemplo n.º 2
0
    def set_gps_location(self,file_name, lat, lng):
        """Adds GPS position as EXIF metadata
        Keyword arguments:
        file_name -- image file
        lat -- latitude (as float)
        lng -- longitude (as float)

        """
        lat_deg = self.to_deg(lat, ["S", "N"])
        lng_deg = self.to_deg(lng, ["W", "E"])

        print lat_deg
        print lng_deg

        # class pyexiv2.utils.Rational(numerator, denominator) => convert decimal coordinates into degrees, munutes and seconds
        exiv_lat = (ev.Rational(lat_deg[0]*60+lat_deg[1],60),ev.Rational(lat_deg[2]*100,6000), ev.Rational(0, 1))
        exiv_lng = (ev.Rational(lng_deg[0]*60+lng_deg[1],60),ev.Rational(lng_deg[2]*100,6000), ev.Rational(0, 1))

        exiv_image = ev.ImageMetadata(file_name)
        exiv_image.read()

        # modify GPSInfo of image
        exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
        exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
        exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
        exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
        exiv_image["Exif.Image.GPSTag"] = 654
        exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
        exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 2 0 0'
        exiv_image.write()
def view_gps_location(file_name, lat, lng):
    """Adds GPS position as EXIF metadata
	Keyword arguments:
	file_name -- image file 
	lat -- latitude (as float)
	lng -- longitude (as float)
	"""
    lat_deg = to_deg(lat, ["S", "N"])
    lng_deg = to_deg(lng, ["W", "E"])

    print lat_deg
    print lng_deg

    # convert decimal coordinates into degrees, munutes and seconds
    exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1],
                                 60), pyexiv2.Rational(lat_deg[2] * 100, 6000))
    exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1],
                                 60), pyexiv2.Rational(lng_deg[2] * 100, 6000))

    exiv_image = pyexiv2.Image(file_name)
    exiv_image.readMetadata()
    exif_keys = exiv_image.exifKeys()

    for key in exif_keys:
        print key, [exiv_image[key]]
Exemplo n.º 4
0
  def set_gps_location(self, file_name, lat, lng):
    """Adds GPS position as EXIF metadata
    Keyword arguments:
    file_name -- image file 
    lat -- latitude (as float)
    lng -- longitude (as float)
    """
    lat_deg = self.to_deg(lat, ["S", "N"])
    lng_deg = self.to_deg(lng, ["W", "E"])
    
    print (lat_deg)
    print (lng_deg)
    
    # convert decimal coordinates into degrees, munutes and seconds
    exiv_lat = (pyexiv2.Rational(lat_deg[0]*60+lat_deg[1],60),pyexiv2.Rational(lat_deg[2]*100,6000), pyexiv2.Rational(0, 1))
    exiv_lng = (pyexiv2.Rational(lng_deg[0]*60+lng_deg[1],60),pyexiv2.Rational(lng_deg[2]*100,6000), pyexiv2.Rational(0, 1))

    exiv_image = pyexiv2.ImageMetadata("{}/{}".format(self.download_dir, file_name))
    exiv_image.read()
    exif_keys = exiv_image.exif_keys
    
    exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    exiv_image["Exif.Image.GPSTag"] = 654
    exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'
    
    exiv_image.write()
Exemplo n.º 5
0
def get_metadata(dateString, timedict, timeshift, path, report=None):
    """get_metadata(float) - get a dictionary of changes to the metadata
       dateString - EXIF date format string /* in */
       timeshift  - delta between GMT and local time (seconds.
                    Positive to West)
       path       - path to the image (only for stdout reporting)
       report     - log file
    """
    if not pyexiv2:
        raise ImportError('pyexiv2 is not installed')
    stamp = str(get_xml_timez(dateString, timeshift))

    timestamp = search(timedict, stamp)
    data = timedict[timestamp]
    ele = float(data[0])
    lat = float(data[1])
    lon = float(data[2])

    latR = 'N'
    lonR = 'E'
    eleR = 0
    if lat < 0:
        lat = -lat
        latR = 'S'
    if lon < 0:
        lon = -lon
        lonR = 'W'
    sele = "%6.1f" % (ele)
    if ele < 0:
        ele = -ele
        eleR = 1

    slat = "%02d.%02d'" '%02d"%s' % (d(lat), m(lat), s(lat), latR)
    slon = "%02d.%02d'" '%02d"%s' % (d(lon), m(lon), s(lon), lonR)
    if report:
        report.write(",".join([stamp, timestamp, slat, slon, sele, path])\
            + "\n")
    # get Rational number for ele
    # don't know why r(ele) is causing trouble!
    # it might be that the denominator is overflowing 32 bits!
    # and this would also import lat and lon
    rele = pyexiv2.Rational(int(ele * 10.0), 10)
    # create and return the dictionary of tags to be added to the image
    metadata = {}
    metadata['Exif_GPSInfo_GPSAltitude'] = rele
    metadata['Exif_GPSInfo_GPSAltitudeRef'] = eleR
    metadata['Exif_GPSInfo_GPSDateStamp'] = stamp
    metadata['Exif_GPSInfo_GPSLatitude'] = \
        [r(d(lat)), r(m(lat)), r(s(lat))]
    metadata['Exif_GPSInfo_GPSLatitudeRef'] = latR
    metadata['Exif_GPSInfo_GPSLongitude'] = \
        [r(d(lon)), r(m(lon)), r(s(lon))]
    metadata['Exif_GPSInfo_GPSLongitudeRef'] = lonR
    metadata['Exif_GPSInfo_GPSMapDatum'] = 'WGS-84'
    metadata['Exif_GPSInfo_GPSProcessingMethod'] = \
        '65 83 67 73 73 0 0 0 72 89 66 82 73 68 45 70 73 88 '
    metadata['Exif_GPSInfo_GPSTimeStamp'] = \
        [r(10), r(20), r(30)]
    metadata['Exif_GPSInfo.GPSVersionID'] = '2 2 0 0'
    return metadata
Exemplo n.º 6
0
    def set_gps_location(self, file_name, tags):
        lat = tags.lat / 10000000.0
        lng = tags.lng / 10000000.0

        lat_deg = self.to_deg(lat, ["S", "N"])
        lng_deg = self.to_deg(lng, ["W", "E"])

        #conver decimal coordinates into degrees, minutes and seconds

        exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1], 60),
                    pyexiv2.Rational(lat_deg[2] * 100,
                                     6000), pyexiv2.Rational(0, 1))
        exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1], 60),
                    pyexiv2.Rational(lng_deg[2] * 100,
                                     6000), pyexiv2.Rational(0, 1))

        exiv_image = pyexiv2.ImageMetadata(file_name)
        exiv_image.read()
        exif_keys = exiv_image.exif_keys
        exiv_altitude = pyexiv2.Rational(tags.altitude, 1)
        print(exiv_lat, exiv_lng, lat_deg[3], lng_deg[3], exiv_altitude)
        if tags.altitude > 0:
            exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
            exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
            exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
            exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
            exiv_image["Exif.GPSInfo.GPSAltitude"] = exiv_altitude
            exiv_image["Exif.GPSInfo.GPSAltitudeRef"] = '0'
            exiv_image["Exif.Image.GPSTag"] = 654
            exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
            exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

            exiv_image.write()
Exemplo n.º 7
0
def SetGpsLocation(file_name, lat, lng, alt):
    """
        Adding GPS tag

    """
    lat_deg = to_degree(lat, ["S", "N"])
    lng_deg = to_degree(lng, ["W", "E"])

    exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1],
                                 60), pyexiv2.Rational(lat_deg[2] * 100, 6000),
                pyexiv2.Rational(0, 1))
    exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1],
                                 60), pyexiv2.Rational(lng_deg[2] * 100, 6000),
                pyexiv2.Rational(0, 1))

    exiv_image = pyexiv2.ImageMetadata(file_name)
    exiv_image.read()

    exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    exiv_image["Exif.GPSInfo.GPSAltitude"] = pyexiv2.Rational(alt, 1)
    exiv_image["Exif.GPSInfo.GPSAltitudeRef"] = '0'
    exiv_image["Exif.Image.GPSTag"] = 654
    exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

    exiv_image.write(True)
Exemplo n.º 8
0
def decimal_to_dms(decimal, signed=True):
    # if decimal is negative we need to make the degrees and minutes
    #   negative also
    sign = 1
    if (decimal < 0):
        sign = -1

    # http://anothergisblog.blogspot.com/2011/11/convert-decimal-degree-to-degrees.html # noqa
    degrees = int(decimal)
    subminutes = abs((decimal - int(decimal)) * 60)
    minutes = int(subminutes) * sign
    subseconds = abs((subminutes - int(subminutes)) * 60) * sign
    subseconds_fraction = Fraction(subseconds)

    if (signed is False):
        degrees = abs(degrees)
        minutes = abs(minutes)
        subseconds_fraction = Fraction(abs(subseconds))

    return (pyexiv2.Rational(degrees, 1), pyexiv2.Rational(minutes, 1),
            pyexiv2.Rational(subseconds_fraction.numerator,
                             subseconds_fraction.denominator))
Exemplo n.º 9
0
def set_gps_location(file_name, lat, lng, overwrite=False, address=None):
    """Adds GPS position as EXIF metadata

    Keyword arguments:
    file_name -- image file
    lat -- latitude (as float)
    lng -- longitude (as float)

    """
    exiv_image = pyexiv2.ImageMetadata(file_name)
    exiv_image.read()

    has_geotag = utils.get_exif_value(exiv_image, "Exif.GPSInfo.GPSLatitude") is not None and \
                    utils.get_exif_value(exiv_image, "Exif.GPSInfo.GPSLatitudeRef") is not None and \
                    utils.get_exif_value(exiv_image, "Exif.GPSInfo.GPSLongitude") is not None and \
                    utils.get_exif_value(exiv_image, "Exif.GPSInfo.GPSLongitudeRef") is not None

    if not overwrite and has_geotag:
        print file_name, "-> Already tagged"
        return GeotagStatus.already_tagged

    lat_deg = to_deg(lat, ["S", "N"])
    lng_deg = to_deg(lng, ["W", "E"])

    # convert decimal coordinates into degrees, munutes and seconds
    exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1],
                                 60), pyexiv2.Rational(lat_deg[2] * 100, 6000),
                pyexiv2.Rational(0, 1))
    exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1],
                                 60), pyexiv2.Rational(lng_deg[2] * 100, 6000),
                pyexiv2.Rational(0, 1))

    exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    exiv_image["Exif.Image.GPSTag"] = 654
    exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

    exiv_image.write(True)

    print file_name, "-> Tagged!", "(overwrited)" if overwrite and has_geotag else "",
    if address:
        print "(" + address + ")",

    print "http://maps.google.com/?ll=%(la)s,%(lo)s" % {
        "la": str(lat),
        "lo": str(lng)
    }

    return GeotagStatus.tagged
Exemplo n.º 10
0
def set_gps_location(file_name, lat, lng):
	"""Adds GPS position as EXIF metadata
	Keyword arguments:
	file_name -- image file 
	lat -- latitude (as float)
	lng -- longitude (as float)
	"""	
	global attribute
	lat_deg = to_deg(lat, ["S", "N"])
	lng_deg = to_deg(lng, ["W", "E"])
	
	#print lat_deg
	#print lng_deg
	
	# convert decimal coordinates into degrees, munutes and seconds
	if attribute == False:
		exiv_lat = (pyexiv2.Rational(lat_deg[0]*60+lat_deg[1],60),pyexiv2.Rational(lat_deg[2]*100,6000), pyexiv2.Rational(0, 1))
		exiv_lng = (pyexiv2.Rational(lng_deg[0]*60+lng_deg[1],60),pyexiv2.Rational(lng_deg[2]*100,6000), pyexiv2.Rational(0, 1))
	else:
		exiv_lat = (pyexiv2.Rational(lat_deg[0]*60,60),pyexiv2.Rational(lat_deg[1]*100,100), pyexiv2.Rational(lat_deg[2]*10000, 10000))
		exiv_lng = (pyexiv2.Rational(lng_deg[0]*60,60),pyexiv2.Rational(lng_deg[1]*100,100), pyexiv2.Rational(lng_deg[2]*10000, 10000))

	exiv_image = pyexiv2.ImageMetadata(file_name)
	exiv_image.read()
	exif_keys = exiv_image.exif_keys
	
	exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
	exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
	exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
	exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
	exiv_image["Exif.Image.GPSTag"] = 654
	exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
	exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'
	
	exiv_image.write()
	exiv_image.write()
Exemplo n.º 11
0
def SetGpsLocation(file_name, gps_datetime, lat, lng, alt):
    """
        Adding GPS tag

    """
    lat_deg = to_degree(lat, ["S", "N"])
    lng_deg = to_degree(lng, ["W", "E"])

    exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1], 60), pyexiv2.Rational(
        lat_deg[2] * 100, 6000), pyexiv2.Rational(0, 1))
    exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1], 60), pyexiv2.Rational(
        lng_deg[2] * 100, 6000), pyexiv2.Rational(0, 1))

    exiv_image = pyexiv2.ImageMetadata(file_name)
    exiv_image.read()

    date_tag = exiv_image['Exif.Image.DateTime']

    date_max = max(date_tag.value, gps_datetime)
    date_min = min(date_tag.value, gps_datetime)
    time_diff = date_max - date_min
    if (time_diff > timedelta(seconds=5)):
        print(
            "WARNING, camera trigger and photo time different by {}".format(time_diff))
        print("  Photo tag time: {}".format(date_tag.value))
        print("  Camera trigger time: {}".format(gps_datetime))

    exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    exiv_image["Exif.GPSInfo.GPSAltitude"] = pyexiv2.Rational(alt, 1)
    exiv_image["Exif.GPSInfo.GPSAltitudeRef"] = '0'
    exiv_image["Exif.Image.GPSTag"] = 654
    exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

    exiv_image.write(True)
Exemplo n.º 12
0
def set_gps_location(file_name, lat, lng, alt, t):
    """
    see: http://stackoverflow.com/questions/453395/what-is-the-best-way-to-geotag-jpeg-images-with-python
    
    Adds GPS position as EXIF metadata

    Keyword arguments:
    file_name -- image file 
    lat -- latitude (as float)
    lng -- longitude (as float)

    """

    lat_deg = to_deg(lat, ["S", "N"])
    lng_deg = to_deg(lng, ["W", "E"])

    # convert decimal coordinates into degrees, munutes and seconds
    exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1],
                                 60), pyexiv2.Rational(lat_deg[2] * 100, 6000),
                pyexiv2.Rational(0, 1))
    exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1],
                                 60), pyexiv2.Rational(lng_deg[2] * 100, 6000),
                pyexiv2.Rational(0, 1))

    m = pyexiv2.ImageMetadata(file_name)
    m.read()

    m["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    m["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    m["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    m["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    m["Exif.Image.GPSTag"] = 654
    m["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    m["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'
    m["Exif.Image.DateTime"] = datetime.datetime.fromtimestamp(t)

    try:
        m["Exif.GPSInfo.GPSAltitude"] = mav_position.Fraction(alt)
    except Exception:
        pass

    m.write()
Exemplo n.º 13
0
    def set_gps_location(self, file_name, lat, lng, alt):
        """
        Add the GPS tag and altitude to a image file
        :param file_name:
        :param lat:
        :param lng:
        :param alt:
        :return:
        """
        lat_deg = self.to_degree(lat, ["S", "N"])
        lng_deg = self.to_degree(lng, ["W", "E"])

        exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1], 60),
                    pyexiv2.Rational(lat_deg[2] * 100,
                                     6000), pyexiv2.Rational(0, 1))
        exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1], 60),
                    pyexiv2.Rational(lng_deg[2] * 100,
                                     6000), pyexiv2.Rational(0, 1))

        try:
            exiv_image = pyexiv2.ImageMetadata(file_name)
            exiv_image.read()

            exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
            exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
            exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
            exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
            exiv_image["Exif.GPSInfo.GPSAltitude"] = pyexiv2.Rational(alt, 1)
            exiv_image["Exif.GPSInfo.GPSAltitudeRef"] = '0'
            exiv_image["Exif.Image.GPSTag"] = 654
            exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
            exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

            exiv_image.write(True)
        except Exception as e:
            print '[ERROR]', e
def set_gps_location(file_name, lat, lng):
    """Adds GPS position as EXIF metadata
	Keyword arguments:
	file_name -- image file 
	lat -- latitude (as float)
	lng -- longitude (as float)
	"""
    lat_deg = to_deg(lat, ["S", "N"])
    lng_deg = to_deg(lng, ["W", "E"])

    print lat_deg
    print lng_deg

    lat_deg_sec = str(lat_deg[2]).split('.')
    print(lat_deg_sec[1] + "E")

    # convert decimal coordinates into degrees, munutes and seconds
    exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60,
                                 60), pyexiv2.Rational(lat_deg[1] * 100, 100),
                pyexiv2.Rational(lat_deg[2] * 10000000, 10000000))
    exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60,
                                 60), pyexiv2.Rational(lng_deg[1] * 100, 100),
                pyexiv2.Rational(lng_deg[2] * 10000000, 10000000))

    exiv_image = pyexiv2.ImageMetadata(file_name)
    exiv_image.read()
    exif_keys = exiv_image.exif_keys

    print(str(exiv_lat) + " H")
    exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat
    exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
    exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng
    exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
    exiv_image["Exif.Image.GPSTag"] = 654
    exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
    exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'

    exiv_image.write()
Exemplo n.º 15
0
    def set_gps_location(self, file_name, lat, lng,
                         alt):  #function to write gps data in image (geotagg)
        """Adds GPS position as EXIF metadata

           Keyword arguments:
           file_name -- image file
           lat -- latitude (as float)
           lng -- longitude (as float)

           """
        lat_deg = self.to_deg(lat, ["S", "N"])
        lng_deg = self.to_deg(lng, ["W", "E"])

        # convert decimal coordinates into degrees, munutes and seconds
        exiv_lat = (pyexiv2.Rational(lat_deg[0] * 60 + lat_deg[1], 60),
                    pyexiv2.Rational(lat_deg[2] * 100,
                                     6000), pyexiv2.Rational(0, 1))
        exiv_lng = (pyexiv2.Rational(lng_deg[0] * 60 + lng_deg[1], 60),
                    pyexiv2.Rational(lng_deg[2] * 100,
                                     6000), pyexiv2.Rational(0, 1))
        metadata = pyexiv2.ImageMetadata(file_name)

        metadata.read()

        # write value in tag
        metadata["Exif.GPSInfo.GPSLatitude"] = exiv_lat
        metadata["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
        metadata["Exif.GPSInfo.GPSLongitude"] = exiv_lng
        metadata["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
        metadata["Exif.GPSInfo.GPSAltitudeRef"] = '0' if alt >= 0 else '1'
        # metadata["Exif.GPSInfo.GPSAltitude"]=pyexiv2.Rational(alt,1)
        alt1 = Fraction(alt).limit_denominator()
        metadata["Exif.GPSInfo.GPSAltitude"] = alt1
        metadata["Exif.Image.GPSTag"] = 654
        metadata["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
        metadata["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'
        metadata.write()
Exemplo n.º 16
0
    def mark_photo(self, file_name):
        metadata = pyexiv2.ImageMetadata(file_name)
        metadata.read()
        print file_name
        try:
            if len(metadata['Exif.GPSInfo.GPSLongitude'].value) > 0:
                return
        except KeyError:
            pass

        timedelta = datetime.datetime.now() - datetime.datetime.utcnow()
        # To UC datetime.
        try:
            date_time_original = metadata[
                'Exif.Photo.DateTimeOriginal'].value - timedelta
            index = self.find_point(date_time_original)
        except KeyError:
            index = -1
        print 'find:', index
        if index < 0:
            return
        point = self._points[index]
        if point.longitude > 0:
            metadata['Exif.GPSInfo.GPSLongitudeRef'] = 'E'
        else:
            metadata['Exif.GPSInfo.GPSLongitudeRef'] = 'W'
        if point.latitude > 0:
            metadata['Exif.GPSInfo.GPSLatitudeRef'] = 'N'
        else:
            metadata['Exif.GPSInfo.GPSLatitudeRef'] = 'S'
        if point.elevation > 0:
            metadata['Exif.GPSInfo.GPSAltitudeRef'] = '0'
        else:
            metadata['Exif.GPSInfo.GPSAltitudeRef'] = '1'
        gps_altitude = pyexiv2.Rational(abs(point.elevation) * 1000, 1000)

        gps_longitude = pyexiv2.NotifyingList()
        gps_longitude.append(pyexiv2.Rational(point.longitude, 1))
        minute = (point.longitude - int(point.longitude)) * 60
        gps_longitude.append(pyexiv2.Rational(minute, 1))
        second = (minute - int(minute)) * 60
        gps_longitude.append(pyexiv2.Rational(minute * 10000, 10000))

        gps_latitude = pyexiv2.NotifyingList()
        gps_latitude.append(pyexiv2.Rational(point.latitude, 1))
        minute = (point.latitude - int(point.latitude)) * 60
        gps_latitude.append(pyexiv2.Rational(minute, 1))
        second = (minute - int(minute)) * 60
        gps_latitude.append(pyexiv2.Rational(minute * 10000, 10000))

        gps_time_stamp = pyexiv2.NotifyingList()
        gps_time_stamp.append(pyexiv2.Rational(point.time.hour, 1))
        gps_time_stamp.append(pyexiv2.Rational(point.time.minute, 1))
        gps_time_stamp.append(
            pyexiv2.Rational(
                point.time.second * 100 + point.time.microsecond / 10000, 100))

        metadata['Exif.GPSInfo.GPSLongitude'] = gps_longitude
        metadata['Exif.GPSInfo.GPSLatitude'] = gps_latitude
        metadata['Exif.GPSInfo.GPSAltitude'] = gps_altitude
        metadata['Exif.GPSInfo.GPSDateStamp'] = point.time.strftime('%Y-%m-%d')
        metadata['Exif.GPSInfo.GPSTimeStamp'] = gps_time_stamp
        print metadata['Exif.GPSInfo.GPSLongitudeRef'].value, metadata[
            'Exif.GPSInfo.GPSLongitude'].value
        print metadata['Exif.GPSInfo.GPSLatitudeRef'].value, metadata[
            'Exif.GPSInfo.GPSLatitude'].value
        metadata.write()
Exemplo n.º 17
0
def r(f):
    """r(float) - get a Rational number for a float"""
    s = surd.surd(float(f))
    return pyexiv2.Rational(s.num, s.denom)
Exemplo n.º 18
0
 def float_to_rational(value):
     frac = fractions.Fraction(abs(value)).limit_denominator(99999)
     return pyexiv2.Rational(frac.numerator, frac.denominator)