2010-07-14 7 views
13

Я хочу хранить некоторые метаданные в изображениях. Приложение моей камеры дает мне растровое изображение, которое я храню на устройстве хранения (MediaStore). В дополнение к этому, я хочу добавить несколько тегов к картинке в свои метаданные. Я думаю, что EXIF ​​- хороший способ сделать это. Но я не мог найти хороших ссылок на то, как это сделать.Написание метаданных EXIF ​​для изображений в Android

Если есть некоторые инструменты для достижения этой задачи в Android-программировании, пожалуйста, дайте мне знать.

Благодаря

+1

ExifInterface может быть несколько ненадежны - я видел это испорченные данные EXIF ​​при определенных обстоятельствах. Более надежным вариантом, который обрабатывает больше тегов EXIF ​​(включая пользовательские теги EXIF), является Sanselan Android. http://code.google.com/p/sanselanandroid/ Примеры использования для Sanselan Android находятся здесь: http://massapi.com/source/sanselan-0.97-incubator/src/test/java/org/apache/sanselan/ sampleUsage/WriteExifMetadataExample.java.html – Theo

+0

Проверьте [это] (https://github.com/dragon66/pixymeta-android) – dragon66

ответ

9

Хорошо, кто-то (на форуме) указал мне на полезный ресурс. ExifInterface выглядит так, как я и искал. Android-er имеет сообщение, демонстрирующее, как читать метаданные EXIF ​​в Android, и я думаю, что писать не должно быть совсем иначе.

Я не знаю, но можем ли мы EXIF ​​писать произвольные метаданные, т.е. кроме тех, которые указаны в ExifInterface documentation (например, широта, долгота, вспышка и т. д.). Если нет, то какой может быть предпочтительный метод записи произвольных метаданных в файлы изображений?

Благодаря

+1

Не могли бы вы задать новый вопрос из вашего 2-го абзаца, чтобы мы могли ответить на него правильно? (IMHO ответ «Да») – MikeD

+1

просто сделал: http://stackoverflow.com/questions/15901971/writing-arbitrary-metadata-to-exif-in-android – vpk

+0

Я также нашел эту библиотеку полезной: 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(); 
    } 
} 

Я скопировал ответ от here

Смежные вопросы