2

感谢您阅读这个问题。我相信这个网站上的专家将能够提供我需要的帮助。

我正在尝试编写一个应用程序,允许用户在他们的 Android 手机上编辑照片的 exif 信息。

作为改善用户体验的一部分,我想尽可能应用数据验证。

对于 Exif 标签 - TAG_GPS_PROCESSING_METHOD,我无法正确应用验证。

这是我应用的部分代码:

String strGPSProc = etGPSProc.getText().toString();

if(strGPSProc.equalsIgnoreCase("GPS") || strGPSProc.equalsIgnoreCase("CELLID") || strGPSProc.equalsIgnoreCase("WLAN") || strGPSProc.equalsIgnoreCase("MANUAL") ) {
        returnValue = true;
}else {
        returnValue=false;
        showToast("Incorrect value for GPS Processing Method. Correct value options are GPS, CELLID, WLAN or MANUAL.");
        etGPSProc.requestFocus();
}

此代码检查在用于 GPSProcessingMethod 的 EditText 中输入的值是否具有 EXIF 文档中描述的四个规定值中的任何一个。

但是当我尝试使用 setAttribute() 和 saveAttributes() 函数保存它时,logcat 中出现了一个不可捕获的异常。

Unsupported encoding for GPSProcessingMethod

我从 Exif 文档中了解到 GPSProcessingMethod 的值需要与一些标头信息一起存储。

我需要一些专家建议如何正确实现这一点,而不使用任何其他第 3 部分类。

4

1 回答 1

1

根据Exif 规范

GPS处理方法

一个字符串,记录用于定位的方法的名称。第一个字节表示使用的字符代码(表 6、表 7),后面是方法的名称。由于类型不是 ASCII,因此不需要 NULL 终止

最终,表 6 将字符代码列为 8 字节序列,所以上面的内容大概应该是“第一个字节表示……”。无论如何,ASCII 的字符代码名称定义为41.H, 53.H, 43.H, 49.H, 49.H, 00.H, 00.H, 00.H.,Unicode 是(不出所料)55.H, 4E.H, 49.H, 43.H, 4F.H, 44.H, 45.H, 00.H。我想这些应该是你所需要的。

希望有帮助。

编辑:刚刚发现ExifInterface.setAttribute()只支持字符串值...您可以尝试在字符串开头对值进行编码,但我怀疑这会起作用。听起来编码应该由setAttribute()orsaveAttributes()方法处理。这可能是API中的错误吗?我查看了源代码,但值的实际写入是由本机代码完成的,所以我停止进一步挖掘。

于 2013-08-23T11:22:03.927 回答