2011-02-02 13 views
15

Estoy tratando de establecer el "GPSTimeStamp" en las etiquetas exif de un jpg a través de Android. La documentación es bastante escasa en este caso:
http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMP Tipo es Cadena. Valor constante: "GPSTimeStamp". Pero, ¿cuál es el formato exacto?Android: Ponga GPSTimeStamp en etiquetas EXIF ​​de jpg

buscando aquí: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html
GPSTimeStamp: rational64u [3] (al escribir, fecha en que se despojó de si está presente, y el tiempo se ajusta a UTC si incluye una zona horaria)

por eso es necesario un valor de largo una matriz de 3 celdas? No estoy seguro de qué incluir. Obtuve un "tiempo UTC de esta solución, en milisegundos desde el 1 de enero de 1970". a través de location.gettime().
http://developer.android.com/reference/android/location/Location.html#getTime%28%29
Si escribo el valor largo como una cadena en Timestamp y verifico las etiquetas exif a través de "exif" en Linux, aparece el error "denominador esperado". Todos los experimentos con hh: mm: ss u otros formatos han fallado. Estar un poco perdido aquí.

Respuesta

1

formato apropiado para GPSTimeStamp atributo de tiempo de la muestra es 14:22:32

"14/1,22/1,32/1" 

Puede utilizar siguiente código:

Location location = ...; // TODO - Set location properly. 
long locationTome = location.getTime(); 
ExifInterface imageExif = new ExifInterface("absolute_path_to_image"); 
Calendar calendar = Calendar.getInstance(); 

calendar.setTimeInMillis(locationTome); 
int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); 
int minutes = calendar.get(Calendar.MINUTE); 
int seconds = calendar.get(Calendar.SECOND); 

String exifGPSTimestamp = hourOfDay + "/1," + minutes + "/1," + seconds + "/1"; 

imageExif.setAttribute("GPSTimeStamp", exifGPSTimestamp); 
imageExif.saveAttributes(); 

Tiene formato similar como GPSLatitude y GPSLongitude atributos. Una explicación útil para dicho formato también se puede encontrar aquí: http://www.ridgesolutions.ie/index.php/2015/03/05/geotag-exif-gps-latitude-field-format/

+0

Incluso años después, todavía puede obtener una respuesta. Genial gracias. La aplicación en cuestión ha muerto hace mucho tiempo, pero esto puede ayudar a otros. :) – Redfox

1

En el código fuente Camera.java desde Android setGpsTimestamp el método tiene la siguiente descripción y aplicación:

/** 
    * Sets GPS timestamp. This will be stored in JPEG EXIF header. 
    * 
    * @param timestamp GPS timestamp (UTC in seconds since January 1, 
    *     1970). 
    */ 
    public void setGpsTimestamp(long timestamp) { 
     set(KEY_GPS_TIMESTAMP, Long.toString(timestamp)); 
    } 

Así que la hora UTC de su revisión en milisegundos tiene que convertir en segundos, por lo que es justo una cuestión de dividir por 1000.

Cuestiones relacionadas