ExifInterface saveAttributes()不将属性保存到jpg图像

时间:2019-07-11 09:43:02

标签: android

我正在尝试将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就是我。

1 个答案:

答案 0 :(得分:0)

事实证明,该代码确实起作用,并且gps数据已添加到exif元数据中,但是android似乎无法识别该格式。通过窗口上的图像属性或在在线exif查看器中查看时,数据可见。

当我使用setGpsInfo(Location location)时,某些Android版本似乎可以识别并显示格式。

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