metadata extractor update fix
This commit is contained in:
parent
f15d19c080
commit
90d836cf37
5 changed files with 7 additions and 8 deletions
|
@ -388,7 +388,7 @@ enum class DirType {
|
||||||
override fun createDirectory() = ExifIFD0Directory()
|
override fun createDirectory() = ExifIFD0Directory()
|
||||||
},
|
},
|
||||||
EXIF_THUMBNAIL {
|
EXIF_THUMBNAIL {
|
||||||
override fun createDirectory() = ExifThumbnailDirectory()
|
override fun createDirectory() = ExifThumbnailDirectory(0)
|
||||||
},
|
},
|
||||||
GPS {
|
GPS {
|
||||||
override fun createDirectory() = GpsDirectory()
|
override fun createDirectory() = GpsDirectory()
|
||||||
|
|
|
@ -18,7 +18,6 @@ object ExifTags {
|
||||||
private const val SAMPLE_FORMAT = 0x0153
|
private const val SAMPLE_FORMAT = 0x0153
|
||||||
private const val SMIN_SAMPLE_VALUE = 0x0154
|
private const val SMIN_SAMPLE_VALUE = 0x0154
|
||||||
private const val SMAX_SAMPLE_VALUE = 0x0155
|
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_RAW_FILE_TYPE = 0x7000
|
||||||
private const val SONY_TONE_CURVE = 0x7010
|
private const val SONY_TONE_CURVE = 0x7010
|
||||||
private const val MATTEING = 0x80e3
|
private const val MATTEING = 0x80e3
|
||||||
|
@ -40,7 +39,6 @@ object ExifTags {
|
||||||
SAMPLE_FORMAT to "Sample Format",
|
SAMPLE_FORMAT to "Sample Format",
|
||||||
SMIN_SAMPLE_VALUE to "S Min Sample Value",
|
SMIN_SAMPLE_VALUE to "S Min Sample Value",
|
||||||
SMAX_SAMPLE_VALUE to "S Max 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_RAW_FILE_TYPE to "Sony Raw File Type",
|
||||||
SONY_TONE_CURVE to "Sony Tone Curve",
|
SONY_TONE_CURVE to "Sony Tone Curve",
|
||||||
MATTEING to "Matteing",
|
MATTEING to "Matteing",
|
||||||
|
|
|
@ -116,7 +116,7 @@ object Helper {
|
||||||
fun safeReadTiff(input: InputStream): com.drew.metadata.Metadata {
|
fun safeReadTiff(input: InputStream): com.drew.metadata.Metadata {
|
||||||
val reader = RandomAccessStreamReader(input, RandomAccessStreamReader.DEFAULT_CHUNK_LENGTH, safeReadStreamLength)
|
val reader = RandomAccessStreamReader(input, RandomAccessStreamReader.DEFAULT_CHUNK_LENGTH, safeReadStreamLength)
|
||||||
val metadata = com.drew.metadata.Metadata()
|
val metadata = com.drew.metadata.Metadata()
|
||||||
val handler = SafeExifTiffHandler(metadata, null)
|
val handler = SafeExifTiffHandler(metadata, null, 0)
|
||||||
TiffReader().processTiff(reader, handler, 0)
|
TiffReader().processTiff(reader, handler, 0)
|
||||||
return metadata
|
return metadata
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import com.drew.metadata.exif.ExifSubIFDDirectory
|
||||||
import com.drew.metadata.exif.ExifTiffHandler
|
import com.drew.metadata.exif.ExifTiffHandler
|
||||||
import java.io.IOException
|
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)
|
@Throws(IOException::class)
|
||||||
override fun customProcessTag(
|
override fun customProcessTag(
|
||||||
tagOffset: Int,
|
tagOffset: Int,
|
||||||
|
|
|
@ -45,6 +45,7 @@ object SafePngMetadataReader {
|
||||||
private const val chunkSizeDangerThreshold = SafeXmpReader.SEGMENT_TYPE_SIZE_DANGER_THRESHOLD
|
private const val chunkSizeDangerThreshold = SafeXmpReader.SEGMENT_TYPE_SIZE_DANGER_THRESHOLD
|
||||||
|
|
||||||
private val latin1Encoding = Charsets.ISO_8859_1
|
private val latin1Encoding = Charsets.ISO_8859_1
|
||||||
|
private val utf8Encoding = Charsets.UTF_8
|
||||||
private val desiredChunkTypes: Set<PngChunkType> = hashSetOf(
|
private val desiredChunkTypes: Set<PngChunkType> = hashSetOf(
|
||||||
PngChunkType.IHDR,
|
PngChunkType.IHDR,
|
||||||
PngChunkType.PLTE,
|
PngChunkType.PLTE,
|
||||||
|
@ -234,7 +235,7 @@ object SafePngMetadataReader {
|
||||||
val reader: SequentialReader = SequentialByteArrayReader(bytes)
|
val reader: SequentialReader = SequentialByteArrayReader(bytes)
|
||||||
|
|
||||||
// Keyword is 1-79 bytes, followed by the 1 byte null character
|
// 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 keyword = keywordsv.toString()
|
||||||
val compressionFlag = reader.int8
|
val compressionFlag = reader.int8
|
||||||
val compressionMethod = reader.int8
|
val compressionMethod = reader.int8
|
||||||
|
@ -273,7 +274,7 @@ object SafePngMetadataReader {
|
||||||
XmpReader().extract(textBytes, metadata)
|
XmpReader().extract(textBytes, metadata)
|
||||||
} else {
|
} else {
|
||||||
val textPairs: MutableList<KeyValuePair> = ArrayList()
|
val textPairs: MutableList<KeyValuePair> = ArrayList()
|
||||||
textPairs.add(KeyValuePair(keyword, StringValue(textBytes, latin1Encoding)))
|
textPairs.add(KeyValuePair(keyword, StringValue(textBytes, utf8Encoding)))
|
||||||
val directory = PngDirectory(PngChunkType.iTXt)
|
val directory = PngDirectory(PngChunkType.iTXt)
|
||||||
directory.setObject(PngDirectory.TAG_TEXTUAL_DATA, textPairs)
|
directory.setObject(PngDirectory.TAG_TEXTUAL_DATA, textPairs)
|
||||||
metadata.addDirectory(directory)
|
metadata.addDirectory(directory)
|
||||||
|
@ -316,7 +317,7 @@ object SafePngMetadataReader {
|
||||||
metadata.addDirectory(directory)
|
metadata.addDirectory(directory)
|
||||||
} else if (chunkType == PngChunkType.eXIf) {
|
} else if (chunkType == PngChunkType.eXIf) {
|
||||||
try {
|
try {
|
||||||
val handler = ExifTiffHandler(metadata, null)
|
val handler = ExifTiffHandler(metadata, null, 0)
|
||||||
TiffReader().processTiff(ByteArrayReader(bytes), handler, 0)
|
TiffReader().processTiff(ByteArrayReader(bytes), handler, 0)
|
||||||
} catch (ex: TiffProcessingException) {
|
} catch (ex: TiffProcessingException) {
|
||||||
val directory = PngDirectory(PngChunkType.eXIf)
|
val directory = PngDirectory(PngChunkType.eXIf)
|
||||||
|
|
Loading…
Reference in a new issue