2010-07-14 83 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 2012-12-09 03:02:47

+0

查看[this](https://github.com/dragon66/pixymeta-android) – dragon66 2015-03-30 20:15:04

回答

9

好吧,有人(离线)指出我有用的资源。 ExifInterface看起来像我正在寻找。 Android-er有一篇文章演示如何阅读Android中的EXIF元数据,我认为写作不应该有很大的不同。

我不知道,但我们可以用EXIF写任意的元数据,即。除了ExifInterface documentation(如经纬度,闪光灯等)中指定的以外。如果不是,那么将任意元数据写入图像文件的首选方法是什么?

感谢

+1

您能否从第2段中提出一个新问题,以便我们能够正确回答它? (恕我直言,答案是肯定的) – MikeD 2013-04-09 08:31:00

+1

刚刚做到了:http://stackoverflow.com/questions/15901971/writing-arbitrary-metadata-to-exif-in-android – vpk 2013-04-09 12:32:23

+0

我也发现这个库很有用:https:// github.com/dragon66/pixymeta-android – 2017-05-30 12:55:14

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