【问题标题】:ExifInterface saveAttributes() not saving the attributes to the jpg imageExifInterface saveAttributes() 不将属性保存到 jpg 图像
【发布时间】:2019-07-12 20:43:44
【问题描述】:

我正在尝试将 gps 位置标签添加到 jpg 图像。 这些图像是我的应用使用 android 后置摄像头拍摄的照片,然后转换为位图、编辑并最终保存为 JPEG。

图像保存后,我尝试使用 ExifInterface 添加 gps 数据。我用于格式化和保存 gps 标签的代码基于this question 上的答案。

public void geoTag(String filePath, double latitude, double longitude){
    ExifInterface exif;

    try {
        File file = new File(filePath);
        exif = new ExifInterface(file);
        int num1Lat = (int)Math.floor(latitude);
        int num2Lat = (int)Math.floor((latitude - num1Lat) * 60);
        double num3Lat = (latitude - ((double)num1Lat+((double)num2Lat/60))) * 3600000;

        int num1Lon = (int)Math.floor(longitude);
        int num2Lon = (int)Math.floor((longitude - num1Lon) * 60);
        double num3Lon = (longitude - ((double)num1Lon+((double)num2Lon/60))) * 3600000;

        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, num1Lat+"/1,"+num2Lat+"/1,"+num3Lat+"/1000");
        exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, num1Lon+"/1,"+num2Lon+"/1,"+num3Lon+"/1000");


        if (latitude > 0) {
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "N");
        } else {
            exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, "S");
        }

        if (longitude > 0) {
            exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "E");
        } else {
            exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, "W");
        }
        exif.saveAttributes();
    } catch (IOException e) {
        Log.e("PictureActivity", e.getLocalizedMessage());
    }

}

当我调用此方法时,我的 jpg 图像中不会添加任何标签。我的纬度和经度参数是正确的,我从系统的位置服务中获取它们,我拥有所需的权限。文件路径正确,文件存在。创建 ExifInterface 不会引发任何异常。调用 saveAttributes() 也不会抛出任何异常。

我尝试添加另一个标签,看看我的格式是否不正确。

exif.setAttribute(ExifInterface.TAG_GPS_TIMESTAMP, "10:00:00");

但这也没有出现在我的 jpg 信息中。

我的 minSdkVersion 设置为 23,我的 targetSdkVersion 设置为 29。一开始我使用android.media.ExifInterface,然后我切换到androidx.exifinterface.media.ExifInterface,但这也没有帮助。

This 是我得到的,但这是我 want

【问题讨论】:

    标签: android


    【解决方案1】:

    原来代码确实有效,并且在exif元数据中添加了gps数据,但android似乎无法识别该格式。当通过 windows 上的图像属性查看或在在线 exif 查看器中查看时,数据是可见的。

    当我使用setGpsInfo(Location location) 时,一些android 版本似乎确实可以识别格式并显示它。

    Phydiux 对this question 的回答也证实了我对格式化的怀疑。

    【讨论】:

      猜你喜欢
      • 2017-05-25
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多