目前我正在开发具有删除 EXIF 标签功能的 Android 应用程序。内置的 Android 库 (android.media.ExifInterface) 不允许这样做。只能编辑现有值。这就是为什么我认为我可以用一些空值(例如空字符串、空格、零)覆盖它们。EXIF 规范中的标签具有不同的类型,我无法用相同的值覆盖它们。
请参阅: http ://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html
经过一些测试后,我用下面提供的空值替换了数据(按照开头显示的格式)。在评论中我指定了相应标签的类型。
private static final Map<String, String> emptyValues = new HashMap<String, String>();
static {
emptyValues.put(ExifInterface.TAG_APERTURE, "0"); //rational64u
emptyValues.put(ExifInterface.TAG_DATETIME, ""); //string
emptyValues.put(ExifInterface.TAG_EXPOSURE_TIME, "0.0000" ); //rational64u
emptyValues.put(ExifInterface.TAG_FLASH, "0" ); //int16u
emptyValues.put(ExifInterface.TAG_FOCAL_LENGTH, " 0/0" ); //rational64u
emptyValues.put(ExifInterface.TAG_GPS_ALTITUDE, "0/0" ); //rational64u
emptyValues.put(ExifInterface.TAG_GPS_ALTITUDE_REF, "0" ); //string[2]
emptyValues.put(ExifInterface.TAG_GPS_LATITUDE, "0/0,0/0000,00000000/00000" ); // rational64u
emptyValues.put(ExifInterface.TAG_GPS_LATITUDE_REF, "0" ); //string[2]
emptyValues.put(ExifInterface.TAG_GPS_LONGITUDE, "0/0,0/0,000000/00000 " ); //rational64u
emptyValues.put(ExifInterface.TAG_GPS_LONGITUDE_REF, "0" ); //sting[2]
emptyValues.put(ExifInterface.TAG_GPS_TIMESTAMP, "0:0:0 " ); //rational64u[3]
emptyValues.put(ExifInterface.TAG_GPS_PROCESSING_METHOD, "0" ); //undef
emptyValues.put(ExifInterface.TAG_GPS_DATESTAMP, " " ); //string[11]
emptyValues.put(ExifInterface.TAG_IMAGE_LENGTH, "0" ); //int32u
emptyValues.put(ExifInterface.TAG_IMAGE_WIDTH, "0" ); //int32u
emptyValues.put(ExifInterface.TAG_ISO, " " ); //int16u
emptyValues.put(ExifInterface.TAG_MAKE, " " ); //string
emptyValues.put(ExifInterface.TAG_MODEL, " " ); //string
emptyValues.put(ExifInterface.TAG_WHITE_BALANCE, " " ); //string
emptyValues.put(ExifInterface.TAG_ORIENTATION, " " ); // int16u
}
Run Code Online (Sandbox Code Playgroud)
这是一个好方法吗?有更聪明的方法吗?
小智 0
是否可以选择将图像加载到 Android 位图中,然后将位图保存到新文件中?位图对象不存储 EXIF 数据,因此这会删除 EXIF 数据。当然,这种方法的缺点是您必须再次压缩它,并且可能会损失一点图像质量。
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |