2010-07-14 12 views
13

Tôi muốn lưu trữ một số siêu dữ liệu trong hình ảnh. Ứng dụng máy ảnh của tôi cung cấp cho tôi một bitmap, mà tôi lưu trữ trong thiết bị lưu trữ (MediaStore). Thêm vào đó, tôi muốn thêm một vài thẻ vào hình ảnh trong siêu dữ liệu của nó. Tôi nghĩ EXIF ​​là một cách tốt để làm điều này. Nhưng tôi không thể tìm thấy tài liệu tham khảo tốt về cách làm điều này.Ghi siêu dữ liệu EXIF ​​vào hình ảnh trong Android

Nếu có một số công cụ để đạt được nhiệm vụ này trong lập trình Android, vui lòng cho tôi biết.

Cảm ơn

+1

ExifInterface có thể hơi đáng tin cậy - Tôi đã nhìn thấy nó dữ liệu EXIF ​​tham nhũng trong những hoàn cảnh nhất định. Một tùy chọn đáng tin cậy hơn xử lý nhiều thẻ EXIF ​​hơn (bao gồm thẻ EXIF ​​tùy chỉnh) là Sanselan Android. http://code.google.com/p/sanselanandroid/ Mẫu sử dụng cho Sanselan Android có tại đây: http://massapi.com/source/sanselan-0.97-incubator/src/test/java/org/apache/sanselan/ sampleUsage/WriteExifMetadataExample.java.html – Theo

+0

Kiểm tra [this] (https://github.com/dragon66/pixymeta-android) – dragon66

Trả lời

9

Ok, Ai đó (ngoại tuyến) đã chỉ cho tôi một tài nguyên hữu ích. ExifInterface trông giống như những gì tôi đang tìm kiếm. Android-er có một bài viết chứng minh làm thế nào để đọc siêu dữ liệu EXIF ​​trong Android và tôi nghĩ rằng văn bản không nên rất khác nhau.

Tôi không biết, nhưng chúng ta có thể EXIF ​​viết siêu dữ liệu tùy ý, tức là. khác với những gì được chỉ định trong ExifInterface documentation (như vĩ độ, kinh độ, đèn flash, v.v.). Nếu không, điều gì có thể là một phương pháp ưa thích của việc ghi siêu dữ liệu tùy ý vào các tệp hình ảnh?

Cảm ơn

+1

Bạn có thể tạo câu hỏi mới từ đoạn thứ 2 của mình để chúng tôi có thể trả lời đúng không? (IMHO câu trả lời là Có) – MikeD

+1

vừa làm: http://stackoverflow.com/questions/15901971/writing-arbitrary-metadata-to-exif-in-android – vpk

+0

Tôi cũng thấy thư viện này hữu ích: https: // github.com/dragon66/pixymeta-android –

5
public static void writeFile (File photo, double latitude, double longitude) throws IOException{ 
    ExifInterface exif = null; 

    try{ 
     Log.v("latiDouble", ""+latitude); 
     Log.v("longiDouble", ""+longitude); 
     exif = new ExifInterface(photo.getCanonicalPath()); 
     if (exif != null) { 
      double latitu = latitude; 
      double longitu = longitude; 
      double alat = Math.abs(latitu); 
      double along = Math.abs(longitu); 
      String stringLati = convertDoubleIntoDegree(alat); 
      String stringLongi = convertDoubleIntoDegree(along); 
      exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, stringLati); 
      exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, stringLongi); 
      Log.v("latiString", ""+ stringLati); 
      Log.v("longiString", ""+ stringLongi); 
      exif.saveAttributes(); 
      String lati = exif.getAttribute (ExifInterface.TAG_GPS_LATITUDE); 
      String longi = exif.getAttribute (ExifInterface.TAG_GPS_LONGITUDE); 
      Log.v("latiResult", ""+ lati); 
      Log.v("longiResult", ""+ longi); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

tôi sao chép câu trả lời từ here