2011-02-02 2 views
15

Я пытаюсь установить «GPSTimeStamp» в теги exif jpg через android. Документация довольно скудна на этом:
http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMP Тип - это строка. Постоянное значение: «GPSTimeStamp». Но какой именно формат?Android: поставьте GPSTimeStamp в jpg теги EXIF ​​

Цель здесь: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html
GPSTimeStamp: rational64u [3] (при записи, дата отгоняют, если присутствует, и время устанавливается по Гринвичу, если она включает в себя часовой пояс)

Так что мне нужно длинное значение массив из 3 ячеек? Я не уверен, что добавить. Я получил «UTC время этого исправления в миллисекундах с 1 января 1970 года». через location.gettime().
http://developer.android.com/reference/android/location/Location.html#getTime%28%29
Если я пишу длинное значение в виде строки в меток времени и проверяю теги exif через «exif» в Linux, я получаю ошибку «знаменатель». Все эксперименты с hh: mm: ss или другими форматами потерпели неудачу. Здесь немного потеряно.

ответ

1

Правильный формат для GPSTimeStamp атрибута для времени выборки 14:22:32 является

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

Вы можете использовать следующий код:

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(); 

Он имеет аналогичный формат, как GPSLatitude и GPSLongitude атрибутов. Полезное объяснение для такого формата можно также найти здесь: http://www.ridgesolutions.ie/index.php/2015/03/05/geotag-exif-gps-latitude-field-format/

+0

Даже спустя годы вы все равно можете получить ответ. Удивительно, спасибо. Приложение, о котором идет речь, давно мертво, но это может помочь другим. :) – Redfox

1

В исходном коде Camera.java из Android метод setGpsTimestamp имеет следующее описание и реализация:

/** 
    * 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)); 
    } 

Таким образом, время UTC вашего затруднительного в миллисекундах должен быть конвертированы в секунды, так что это просто вопрос деления на 1000.

Смежные вопросы