目前,我正在使用Android应用程序,该应用程序具有删除EXIF标记的功能。 内置的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
}
这是一个好方法吗?有更聪明的方法吗?
答案 0 :(得分:0)
是否可以选择将图片加载到Android位图中,然后将位图保存到新文件中?位图对象不存储EXIF数据,因此这将删除EXIF数据。这种方法的缺点当然是你必须再次压缩它,你可能会失去一点图像质量。