From 90d836cf378c13af5059d459dae7232c5de4f361 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Wed, 29 Nov 2023 22:18:58 +0100 Subject: [PATCH] metadata extractor update fix --- .../deckers/thibault/aves/metadata/ExifInterfaceHelper.kt | 2 +- .../main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt | 2 -- .../thibault/aves/metadata/metadataextractor/Helper.kt | 2 +- .../aves/metadata/metadataextractor/SafeExifTiffHandler.kt | 2 +- .../metadata/metadataextractor/SafePngMetadataReader.kt | 7 ++++--- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt index a9ae20d6d..ce361ea32 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt @@ -388,7 +388,7 @@ enum class DirType { override fun createDirectory() = ExifIFD0Directory() }, EXIF_THUMBNAIL { - override fun createDirectory() = ExifThumbnailDirectory() + override fun createDirectory() = ExifThumbnailDirectory(0) }, GPS { override fun createDirectory() = GpsDirectory() diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt index de7c9c375..723bac061 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt @@ -18,7 +18,6 @@ object ExifTags { private const val SAMPLE_FORMAT = 0x0153 private const val SMIN_SAMPLE_VALUE = 0x0154 private const val SMAX_SAMPLE_VALUE = 0x0155 - private const val RATING_PERCENT = 0x4749 private const val SONY_RAW_FILE_TYPE = 0x7000 private const val SONY_TONE_CURVE = 0x7010 private const val MATTEING = 0x80e3 @@ -40,7 +39,6 @@ object ExifTags { SAMPLE_FORMAT to "Sample Format", SMIN_SAMPLE_VALUE to "S Min Sample Value", SMAX_SAMPLE_VALUE to "S Max Sample Value", - RATING_PERCENT to "Rating Percent", SONY_RAW_FILE_TYPE to "Sony Raw File Type", SONY_TONE_CURVE to "Sony Tone Curve", MATTEING to "Matteing", diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt index 6be0b09d7..6bbd418ff 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt @@ -116,7 +116,7 @@ object Helper { fun safeReadTiff(input: InputStream): com.drew.metadata.Metadata { val reader = RandomAccessStreamReader(input, RandomAccessStreamReader.DEFAULT_CHUNK_LENGTH, safeReadStreamLength) val metadata = com.drew.metadata.Metadata() - val handler = SafeExifTiffHandler(metadata, null) + val handler = SafeExifTiffHandler(metadata, null, 0) TiffReader().processTiff(reader, handler, 0) return metadata } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt index afad1de4c..39a4c4918 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt @@ -8,7 +8,7 @@ import com.drew.metadata.exif.ExifSubIFDDirectory import com.drew.metadata.exif.ExifTiffHandler import java.io.IOException -class SafeExifTiffHandler(metadata: Metadata, parentDirectory: Directory?) : ExifTiffHandler(metadata, parentDirectory) { +class SafeExifTiffHandler(metadata: Metadata, parentDirectory: Directory?, exifStartOffset: Int) : ExifTiffHandler(metadata, parentDirectory, exifStartOffset) { @Throws(IOException::class) override fun customProcessTag( tagOffset: Int, diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt index c438068b5..05822f03a 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt @@ -45,6 +45,7 @@ object SafePngMetadataReader { private const val chunkSizeDangerThreshold = SafeXmpReader.SEGMENT_TYPE_SIZE_DANGER_THRESHOLD private val latin1Encoding = Charsets.ISO_8859_1 + private val utf8Encoding = Charsets.UTF_8 private val desiredChunkTypes: Set = hashSetOf( PngChunkType.IHDR, PngChunkType.PLTE, @@ -234,7 +235,7 @@ object SafePngMetadataReader { val reader: SequentialReader = SequentialByteArrayReader(bytes) // Keyword is 1-79 bytes, followed by the 1 byte null character - val keywordsv = reader.getNullTerminatedStringValue(79 + 1, latin1Encoding) + val keywordsv = reader.getNullTerminatedStringValue(79 + 1, utf8Encoding) val keyword = keywordsv.toString() val compressionFlag = reader.int8 val compressionMethod = reader.int8 @@ -273,7 +274,7 @@ object SafePngMetadataReader { XmpReader().extract(textBytes, metadata) } else { val textPairs: MutableList = ArrayList() - textPairs.add(KeyValuePair(keyword, StringValue(textBytes, latin1Encoding))) + textPairs.add(KeyValuePair(keyword, StringValue(textBytes, utf8Encoding))) val directory = PngDirectory(PngChunkType.iTXt) directory.setObject(PngDirectory.TAG_TEXTUAL_DATA, textPairs) metadata.addDirectory(directory) @@ -316,7 +317,7 @@ object SafePngMetadataReader { metadata.addDirectory(directory) } else if (chunkType == PngChunkType.eXIf) { try { - val handler = ExifTiffHandler(metadata, null) + val handler = ExifTiffHandler(metadata, null, 0) TiffReader().processTiff(ByteArrayReader(bytes), handler, 0) } catch (ex: TiffProcessingException) { val directory = PngDirectory(PngChunkType.eXIf)