Android:将GPSTimeStamp放入jpg EXIF标签

时间:2011-02-02 20:20:23

标签: android tags exif gps-time

我试图通过android将“GPSTimeStamp”设置为jpg的exif标签。这篇文章非常缺乏:
http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMP Type是String。常数值:“GPSTimeStamp”。但确切的格式是什么?

看这里: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html
GPSTimeStamp:rational64u [3](写入时,如果存在则删除日期,如果包含时区则将时间调整为UTC)

所以我需要一个长值的3单元阵列?我不确定,该放什么。我已经获得了“此修复的UTC时间,自1970年1月1日起以毫秒为单位。”通过location.gettime()。
http://developer.android.com/reference/android/location/Location.html#getTime%28%29
如果我将长值作为字符串写入时间戳并通过Linux上的“exif”检查exif标签,我会得到错误“denominator expected”。所有使用hh:mm:ss或其他格式的实验都失败了。在这里有点迷失。

2 个答案:

答案 0 :(得分:1)

在Android的Camera.java源代码中,方法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即可。

答案 1 :(得分:1)

示例时间GPSTimeStamp的{​​{1}}属性的正确格式为

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属性类似的格式。这种格式的有用解释也可以在这里找到:http://www.ridgesolutions.ie/index.php/2015/03/05/geotag-exif-gps-latitude-field-format/