2011-02-02 7 views
15

Tôi đang cố đặt "GPSTimeStamp" thành thẻ exif của jpg thông qua Android. Tài liệu này khá khan hiếm trên tài liệu này:
http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMP Loại là Chuỗi. Giá trị không đổi: "GPSTimeStamp". Nhưng định dạng chính xác là gì?Android: Đặt GPSTimeStamp vào thẻ EXIF ​​jpg

Nhìn ở đây: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html
GPSTimeStamp: rational64u [3] (khi viết, ngày được cởi nếu có, và thời gian được điều chỉnh UTC nếu nó bao gồm một múi giờ)

Vì vậy, tôi cần một giá trị lâu một mảng 3 ô? Tôi không chắc chắn, những gì để đưa vào. Tôi đã có được một "thời gian UTC sửa chữa này, trong mili giây kể từ ngày 1 tháng 1 năm 1970." qua location.gettime().
http://developer.android.com/reference/android/location/Location.html#getTime%28%29
Nếu tôi viết giá trị dài dưới dạng chuỗi vào Dấu thời gian và kiểm tra thẻ exif qua "exif" trên Linux, tôi nhận được lỗi "mẫu số được mong đợi". Tất cả các thử nghiệm có hh: mm: ss hoặc các định dạng khác đều không thành công. Bị lạc một chút ở đây.

Trả lời

1

định dạng đúng cho GPSTimeStamp thuộc tính cho thời gian mẫu 14:22:32

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

Bạn có thể sử dụng đoạn mã sau:

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

Nó có dạng tương tự như GPSLatitudeGPSLongitude thuộc tính. Có thể tìm thấy giải thích hữu ích cho định dạng như vậy tại đây: http://www.ridgesolutions.ie/index.php/2015/03/05/geotag-exif-gps-latitude-field-format/

+0

Thậm chí nhiều năm sau, bạn vẫn có thể nhận được câu trả lời. Thật sự cảm ơn. Ứng dụng được đề cập đã chết lâu, nhưng điều này có thể giúp người khác. :) – Redfox

1

Trong mã nguồn Camera.java từ Android phương pháp setGpsTimestamp có mô tả sau đây và thực hiệ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)); 
    } 

Vì vậy, lần UTC của sửa chữa của bạn trong mili giây phải được quy đổi ra giây, vì vậy nó chỉ là là vấn đề chia cho 1000.