Android: поместите GPSTimeStamp в теги jpg EXIF
Я пытаюсь установить "GPSTimeStamp" в теги exif jpg через android. Документация довольно скудна по этому вопросу one:
http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMP
Тип-строка. Постоянное Значение: "GPSTimeStamp". Но каков точный формат?
смотреть здесь:
http://www.sno.phy.queensu.ca / ~phil/exiftool/TagNames/GPS.html
GPSTimeStamp: rational64u[3] (при записи, дата снимается, если присутствует, и время настраивается на UTC, если оно включает часовой пояс)
Итак, мне нужно длинное значение массива из 3 ячеек? Я не знаю, что поставить. Я получил " UTC время этого исправления, в миллисекундах с 1 января 1970 года."via location.gettime().
http://developer.android.com/reference/android/location/Location.html#getTime%28%29
Если я напишу длинное значение в виде строки в метку времени и проверю теги exif через "exif" в Linux, я получу ошибка "знаменатель ожидаемый". Все эксперименты с HH:mm: ss или другими форматами завершились неудачей. Немного потерялся здесь.
2 ответов
формат GPSTimeStamp
атрибут для времени выборки 14:22:32
is
"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/
в камеру.исходный код 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.