如何使用Android ExifInterface去除exif标签

5

目前我正在开发一个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
}

这是一个好的方案吗?还有更聪明的方法吗?


你是如何解决你的问题的? - Emanuel
1个回答

0

将图像加载到Android位图中,然后将位图保存到新文件是一种选择吗?位图对象不存储EXIF数据,因此这将删除EXIF数据。当然,这种方法的缺点是您必须再次压缩它,可能会失去一些图像质量。


1
这也存在高分辨率图像的内存限制问题。 - SteelBytes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接