Skip to content

Commit

Permalink
Small bugfixes & dependency updates (#37)
Browse files Browse the repository at this point in the history
  • Loading branch information
StefanOltmann authored Dec 2, 2023
1 parent c6d197b commit 32f8def
Show file tree
Hide file tree
Showing 125 changed files with 4,055 additions and 42 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ of Ashampoo Photos, which, in turn, is driven by user community feedback.
## Installation

```
implementation("com.ashampoo:kim:0.7.1")
implementation("com.ashampoo:kim:0.7.2")
```

## Sample usages
Expand Down
10 changes: 5 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework

plugins {
kotlin("multiplatform") version "1.9.21"
id("com.android.library") version "7.4.2"
id("com.android.library") version "8.0.2"
id("maven-publish")
id("signing")
id("io.gitlab.arturbosch.detekt") version "1.23.4"
Expand All @@ -23,7 +23,7 @@ repositories {
val productName = "Ashampoo Kim"

val ktorVersion: String = "2.3.6"
val xmpCoreVersion: String = "0.2.1"
val xmpCoreVersion: String = "0.2.2"
val dateTimeVersion: String = "0.4.1"
val testRessourcesVersion: String = "0.4.0"
val ioCoreVersion: String = "0.3.0"
Expand Down Expand Up @@ -260,7 +260,7 @@ android {

namespace = "com.ashampoo.kim"

compileSdk = 33
compileSdk = 34

sourceSets["main"].res.srcDirs("src/commonMain/resources")

Expand All @@ -269,8 +269,8 @@ android {
}

compileOptions {
sourceCompatibility = JavaVersion.toVersion(11)
targetCompatibility = JavaVersion.toVersion(11)
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

publishing {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
23 changes: 12 additions & 11 deletions src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ import com.ashampoo.kim.format.jpeg.jfif.JFIFPiece
import com.ashampoo.kim.format.jpeg.jfif.JFIFPieceImageData
import com.ashampoo.kim.format.jpeg.jfif.JFIFPieceSegment
import com.ashampoo.kim.format.jpeg.jfif.JFIFPieceSegmentExif
import com.ashampoo.kim.format.tiff.write.TiffImageWriterBase
import com.ashampoo.kim.format.tiff.write.TiffImageWriterLossless
import com.ashampoo.kim.format.tiff.write.TiffImageWriterLossy
import com.ashampoo.kim.format.tiff.write.TiffOutputSet
import com.ashampoo.kim.format.tiff.write.TiffWriterBase
import com.ashampoo.kim.format.tiff.write.TiffWriterLossless
import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
import com.ashampoo.kim.input.ByteReader
import com.ashampoo.kim.output.ByteArrayByteWriter
import com.ashampoo.kim.output.ByteWriter
Expand All @@ -51,9 +51,8 @@ object JpegRewriter {
val visitor: JpegVisitor = object : JpegVisitor {

/* Read the whole file. */
override fun beginSOS(): Boolean {
return true
}
override fun beginSOS(): Boolean =
true

override fun visitSOS(marker: Int, markerBytes: ByteArray, imageData: ByteArray) {
allPieces.add(JFIFPieceImageData(markerBytes, imageData))
Expand Down Expand Up @@ -118,18 +117,20 @@ object JpegRewriter {
val exifSegmentPieces =
segmentPieces.filterIsInstance<JFIFPieceSegment>().filter { it.isExifSegment() }

val writer: TiffImageWriterBase
val writer: TiffWriterBase

if (exifSegmentPieces.isNotEmpty()) {

val exifPiece = exifSegmentPieces.first()

val exifBytes = exifPiece.segmentBytes.getRemainingBytes(JpegConstants.EXIF_IDENTIFIER_CODE.size)

writer = TiffImageWriterLossless(outputSet.byteOrder, exifBytes)
writer = TiffWriterLossless(outputSet.byteOrder, exifBytes)

} else
writer = TiffImageWriterLossy(outputSet.byteOrder)
} else {

writer = TiffWriterLossy(outputSet.byteOrder)
}

val newBytes = writeExifSegment(writer, outputSet)

Expand Down Expand Up @@ -205,7 +206,7 @@ object JpegRewriter {
}

private fun writeExifSegment(
writer: TiffImageWriterBase,
writer: TiffWriterBase,
outputSet: TiffOutputSet
): ByteArray {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
*/
package com.ashampoo.kim.format.jpeg

import com.ashampoo.kim.Kim
import com.ashampoo.kim.common.ImageWriteException
import com.ashampoo.kim.common.startsWith
import com.ashampoo.kim.common.tryWithImageWriteException
Expand All @@ -29,7 +28,6 @@ import com.ashampoo.kim.format.tiff.write.TiffOutputSet
import com.ashampoo.kim.format.xmp.XmpWriter
import com.ashampoo.kim.input.ByteArrayByteReader
import com.ashampoo.kim.input.ByteReader
import com.ashampoo.kim.model.ImageFormat
import com.ashampoo.kim.model.MetadataUpdate
import com.ashampoo.kim.model.TiffOrientation
import com.ashampoo.kim.output.ByteArrayByteWriter
Expand Down
10 changes: 5 additions & 5 deletions src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import com.ashampoo.kim.common.startsWith
import com.ashampoo.kim.common.tryWithImageWriteException
import com.ashampoo.kim.format.ImageFormatMagicNumbers
import com.ashampoo.kim.format.MetadataUpdater
import com.ashampoo.kim.format.tiff.write.TiffImageWriterBase
import com.ashampoo.kim.format.tiff.write.TiffOutputSet
import com.ashampoo.kim.format.tiff.write.TiffWriterBase
import com.ashampoo.kim.format.xmp.XmpWriter
import com.ashampoo.kim.input.ByteArrayByteReader
import com.ashampoo.kim.input.ByteReader
Expand Down Expand Up @@ -63,8 +63,8 @@ internal object PngUpdater : MetadataUpdater {

val exifBytesWriter = ByteArrayByteWriter()

TiffImageWriterBase
.createTiffImageWriter(metadata.exifBytes)
TiffWriterBase
.createTiffWriter(metadata.exifBytes)
.write(exifBytesWriter, outputSet)

exifBytesWriter.toByteArray()
Expand Down Expand Up @@ -108,8 +108,8 @@ internal object PngUpdater : MetadataUpdater {

val exifBytesWriter = ByteArrayByteWriter()

TiffImageWriterBase
.createTiffImageWriter(metadata.exifBytes)
TiffWriterBase
.createTiffWriter(metadata.exifBytes)
.write(exifBytesWriter, outputSet)

val exifBytes = exifBytesWriter.toByteArray()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,14 @@ object TiffReader {

/*
* Skip invalid fields.
*
* These are seen very rarely, but can have invalid value lengths,
* which can cause OOM problems.
*
* Except for the GPS directory where GPSVersionID is indeed zero,
* but a valid field. So we shouldn't skip it.
*/
if (tag == 0)
if (tag == 0 && dirType != TiffConstants.TIFF_GPS)
continue

val fieldType: FieldType = try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ class TiffOutputSet(

is MetadataUpdate.TakenDate -> {

rootDirectory.removeField(TiffTag.TIFF_TAG_DATE_TIME)
exifDirectory.removeField(ExifTag.EXIF_TAG_DATE_TIME_ORIGINAL)
exifDirectory.removeField(ExifTag.EXIF_TAG_DATE_TIME_DIGITIZED)

Expand All @@ -124,7 +123,6 @@ class TiffOutputSet(
.toLocalDateTime(timeZone)
.toExifDateString()

rootDirectory.add(TiffTag.TIFF_TAG_DATE_TIME, exifDateString)
exifDirectory.add(ExifTag.EXIF_TAG_DATE_TIME_ORIGINAL, exifDateString)
exifDirectory.add(ExifTag.EXIF_TAG_DATE_TIME_DIGITIZED, exifDateString)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,12 @@ import com.ashampoo.kim.common.ByteOrder
import com.ashampoo.kim.common.ImageWriteException
import com.ashampoo.kim.format.tiff.constants.ExifTag
import com.ashampoo.kim.format.tiff.constants.TiffConstants
import com.ashampoo.kim.format.tiff.constants.TiffConstants.DEFAULT_TIFF_BYTE_ORDER
import com.ashampoo.kim.format.tiff.constants.TiffConstants.TIFF_HEADER_SIZE
import com.ashampoo.kim.format.tiff.constants.TiffConstants.TIFF_VERSION
import com.ashampoo.kim.output.BinaryByteWriter
import com.ashampoo.kim.output.ByteWriter

abstract class TiffImageWriterBase(
abstract class TiffWriterBase(
val byteOrder: ByteOrder
) {

Expand Down Expand Up @@ -245,12 +244,12 @@ abstract class TiffImageWriterBase(
companion object {

/** Returns an appropriate TiffImageWriter instance. */
fun createTiffImageWriter(oldExifBytes: ByteArray?): TiffImageWriterBase {
fun createTiffWriter(oldExifBytes: ByteArray?): TiffWriterBase {

return if (oldExifBytes != null)
TiffImageWriterLossless(exifBytes = oldExifBytes)
TiffWriterLossless(exifBytes = oldExifBytes)
else
TiffImageWriterLossy()
TiffWriterLossy()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ import com.ashampoo.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter
import com.ashampoo.kim.output.BufferByteWriter
import com.ashampoo.kim.output.ByteWriter

class TiffImageWriterLossless(
class TiffWriterLossless(
byteOrder: ByteOrder = TiffConstants.DEFAULT_TIFF_BYTE_ORDER,
private val exifBytes: ByteArray
) : TiffImageWriterBase(byteOrder) {
) : TiffWriterBase(byteOrder) {

private fun findRewritableSpaceRanges(
makerNoteField: TiffOutputField?
Expand Down Expand Up @@ -185,7 +185,7 @@ class TiffImageWriterLossless(
* Check if there are no gaps in the old data. If so, it's safe to complete overwrite.
*/
if (onlyRange.offset == TIFF_HEADER_SIZE.toLong() && newLength == oldLength.toLong()) {
TiffImageWriterLossy(byteOrder).write(byteWriter, outputSet)
TiffWriterLossy(byteOrder).write(byteWriter, outputSet)
return
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ import com.ashampoo.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter
import com.ashampoo.kim.output.ByteWriter
import kotlin.jvm.JvmStatic

class TiffImageWriterLossy(
class TiffWriterLossy(
byteOrder: ByteOrder = TiffConstants.DEFAULT_TIFF_BYTE_ORDER
) : TiffImageWriterBase(byteOrder) {
) : TiffWriterBase(byteOrder) {

override fun write(byteWriter: ByteWriter, outputSet: TiffOutputSet) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@ class JpegRewriterTest {
Path("build/photo_${index}_modified.jpg")
.writeBytes(actualMetadataBytes)

/* Also write a string representation to see differences more quickly. */
Path("build/photo_${index}_modified.txt")
.writeBytes(Kim.readMetadata(actualMetadataBytes).toString().encodeToByteArray())

fail("Photo $index has not the expected bytes!")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,10 @@ class JpegUpdaterTest {
Path("build/$fileName")
.writeBytes(actualBytes)

/* Also write a string representation to see differences more quickly. */
Path("build/$fileName.txt")
.writeBytes(Kim.readMetadata(actualBytes).toString().encodeToByteArray())

fail("Photo $fileName has not the expected bytes!")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ import com.ashampoo.kim.format.jpeg.iptc.IptcRecord
import com.ashampoo.kim.format.jpeg.iptc.IptcTypes
import com.ashampoo.kim.format.jpeg.iptc.IptcWriter
import com.ashampoo.kim.format.tiff.constants.ExifTag
import com.ashampoo.kim.format.tiff.write.TiffImageWriterLossless
import com.ashampoo.kim.format.tiff.write.TiffImageWriterLossy
import com.ashampoo.kim.format.tiff.write.TiffOutputSet
import com.ashampoo.kim.format.tiff.write.TiffWriterLossless
import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
import com.ashampoo.kim.input.ByteArrayByteReader
import com.ashampoo.kim.output.ByteArrayByteWriter
import com.ashampoo.kim.testdata.KimTestData
Expand Down Expand Up @@ -94,9 +94,9 @@ class PngWriterTest {
val oldExifBytes = oldMetadata.exifBytes

val writer = if (oldExifBytes != null)
TiffImageWriterLossless(exifBytes = oldExifBytes)
TiffWriterLossless(exifBytes = oldExifBytes)
else
TiffImageWriterLossy()
TiffWriterLossy()

writer.write(exifBytesWriter, tiffOutputSet)

Expand Down Expand Up @@ -149,6 +149,10 @@ class PngWriterTest {
Path("build/photo_${index}_modified.png")
.writeBytes(newBytes)

/* Also write a string representation to see differences more quickly. */
Path("build/photo_${index}_modified.txt")
.writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray())

fail("Bytes for test image #$index are different.")
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Git should not touch original CRLF in XMP
*.txt binary
Loading

0 comments on commit 32f8def

Please sign in to comment.