Android: поместите GPSTimeStamp в теги jpg EXIF - PullRequest
16 голосов
/ 02 февраля 2011

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

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

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

Ответы [ 2 ]

1 голос
/ 19 марта 2015

Правильный формат для 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/

1 голос
/ 26 июня 2012

В исходном коде 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.

...