17
17
package org.matrix.android.sdk.internal.session.content
18
18
19
19
import kotlinx.coroutines.withContext
20
- import org.apache.sanselan.Sanselan
21
- import org.apache.sanselan .formats.jpeg.JpegImageMetadata
22
- import org.apache.sanselan. formats.jpeg.exifRewrite .ExifRewriter
23
- import org.apache.sanselan .formats.tiff.constants.ExifTagConstants
24
- import org.apache.sanselan. formats.tiff.constants.GPSTagConstants
20
+ import org.apache.commons.imaging.Imaging
21
+ import org.apache.commons.imaging .formats.jpeg.JpegImageMetadata
22
+ import org.apache.commons.imaging. formats.jpeg.exif .ExifRewriter
23
+ import org.apache.commons.imaging .formats.tiff.constants.ExifTagConstants
24
+ import org.apache.commons.imaging. formats.tiff.constants.GpsTagConstants
25
25
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
26
26
import org.matrix.android.sdk.api.extensions.tryOrNull
27
27
import org.matrix.android.sdk.internal.util.TemporaryFileCreator
@@ -46,24 +46,13 @@ internal class ImageExifTagRemover @Inject constructor(
46
46
*/
47
47
suspend fun removeSensitiveJpegExifTags (jpegImageFile : File ): File = withContext(coroutineDispatchers.io) {
48
48
val outputSet = tryOrNull(" Unable to read JpegImageMetadata" ) {
49
- (Sanselan .getMetadata(jpegImageFile) as ? JpegImageMetadata )?.exif?.outputSet
49
+ (Imaging .getMetadata(jpegImageFile) as ? JpegImageMetadata )?.exif?.outputSet
50
50
} ? : return @withContext jpegImageFile
51
51
52
52
tryOrNull(" Unable to remove ExifData" ) {
53
- outputSet.removeField(ExifTagConstants .EXIF_TAG_GPSINFO )
54
- outputSet.removeField(ExifTagConstants .EXIF_TAG_SUBJECT_LOCATION_1 )
55
- outputSet.removeField(ExifTagConstants .EXIF_TAG_SUBJECT_LOCATION_2 )
56
- outputSet.removeField(ExifTagConstants .EXIF_TAG_USER_COMMENT )
57
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_ALTITUDE )
58
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_ALTITUDE_REF )
59
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_LONGITUDE )
60
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_LONGITUDE_REF )
61
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_DEST_LONGITUDE )
62
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_DEST_LONGITUDE_REF )
63
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_LATITUDE )
64
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_LATITUDE_REF )
65
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_DEST_LATITUDE )
66
- outputSet.removeField(GPSTagConstants .GPS_TAG_GPS_DEST_LATITUDE_REF )
53
+ tagsToRemove.forEach { tagInfo ->
54
+ outputSet.removeField(tagInfo)
55
+ }
67
56
} ? : return @withContext jpegImageFile
68
57
69
58
val scrubbedFile = temporaryFileCreator.create()
@@ -82,4 +71,12 @@ internal class ImageExifTagRemover @Inject constructor(
82
71
}
83
72
)
84
73
}
74
+
75
+ private val tagsToRemove
76
+ get() = GpsTagConstants .ALL_GPS_TAGS +
77
+ listOf (
78
+ ExifTagConstants .EXIF_TAG_GPSINFO ,
79
+ ExifTagConstants .EXIF_TAG_SUBJECT_LOCATION ,
80
+ ExifTagConstants .EXIF_TAG_USER_COMMENT ,
81
+ )
85
82
}
0 commit comments