diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..4928ac02 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Don't touch line endings for all files +* -text diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..68aa92a3 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: StefanOltmann diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0118fce1..633c0c80 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ on: jobs: build: name: Build & Test - runs-on: macos-15 + runs-on: macos-26 steps: - name: Checkout workspace uses: actions/checkout@v4 @@ -24,10 +24,10 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: '17.0.16+8' - - name: Select XCode 16.4 + java-version: '17' + - name: Select XCode 26.4 run: | - sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer + sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer xcodebuild -version - name: Gradle Cache uses: actions/cache@v4 @@ -99,12 +99,6 @@ jobs: if-no-files-found: error name: kim.exe path: build/bin/win/releaseExecutable/kim.exe - - name: Upload kim-macosX64.kexe - uses: actions/upload-artifact@v4 - with: - if-no-files-found: error - name: kim-macosX64.kexe - path: build/bin/macosX64/releaseExecutable/kim.kexe - name: Upload kim-macosArm64.kexe uses: actions/upload-artifact@v4 with: diff --git a/.gitignore b/.gitignore index 3e5d7d45..8220e6fa 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,4 @@ /.kotlin/ /build/ /local.properties -/src/commonTest/resources/com/ashampoo/kim/testdata/full/*.html +/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/*.html diff --git a/.idea/runConfigurations/Check_dependency_updates.xml b/.idea/runConfigurations/Check_dependency_updates.xml index be922287..3039a10a 100644 --- a/.idea/runConfigurations/Check_dependency_updates.xml +++ b/.idea/runConfigurations/Check_dependency_updates.xml @@ -4,7 +4,7 @@ @@ -17,8 +17,11 @@ true true + false false - false + false + false + false \ No newline at end of file diff --git a/NOTICE.txt b/NOTICE.txt index 481426f7..cc0d5ef2 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,22 +1,42 @@ -Ashampoo Kim - Kotlin Image Metadata +Kim - Kotlin Image Metadata +Copyright 2026 Stefan Oltmann + +----------------------------------------------------------------------- + +This project is a continuation of the work originally created by +Stefan Oltmann during his employment at Ashampoo GmbH & Co. KG. + Copyright 2025 Ashampoo GmbH & Co. KG +Copyright 2026 Stefan Oltmann + +The usage rights to the original contributions (up to August 2025) +are held by Ashampoo GmbH & Co. KG and are licensed under the +Apache License, Version 2.0. + +Since 2026, the project is independently maintained and +developed by Stefan Oltmann. + +----------------------------------------------------------------------- This product includes a modified portion of 'Apache Commons Imaging' developed by the Apache Software Foundation (https://www.apache.org/). -The metadata handling logic, originally implemented in Java, has been rewritten in Kotlin. +The metadata handling logic, originally implemented in Java, has +been rewritten in Kotlin. Copyright 2007-2023 The Apache Software Foundation Logic for reading ISOBMFF containers was derived from 'metadata-extractor' developed by Drew Noakes (https://github.com/drewnoakes/metadata-extractor). Copyright 2002-2023 Drew Noakes and contributors +----------------------------------------------------------------------- + This product includes images from Unsplash provided under the Unsplash license (https://unsplash.com/license). These files are used as test data. -The sample images photo_62.nef, photo_63.arw, photo_64.rw2, -photo_56.orf, photo_72.hif and photo_83.cr3 are taken from +The sample images media_62.nef, media_63.arw, media_64.rw2, +media_56.orf, media_72.hif and media_83.cr3 are taken from https://github.com/drewnoakes/metadata-extractor-images under the note "You are free to use these media files however you wish". -The sample image photo_77.heic was contributed by Miroslav Sobotka. +The sample image media_77.heic was contributed by Miroslav Sobotka. diff --git a/README.md b/README.md index 1a752cf3..de444386 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Kim - Kotlin Image Metadata -[![Kotlin](https://img.shields.io/badge/kotlin-2.2.0-blue.svg?logo=kotlin)](httpw://kotlinlang.org) +[![Kotlin](https://img.shields.io/badge/kotlin-2.3.20-blue.svg?logo=kotlin)](httpw://kotlinlang.org) ![JVM](https://img.shields.io/badge/-JVM-gray.svg?style=flat) ![Android](https://img.shields.io/badge/-Android-gray.svg?style=flat) ![iOS](https://img.shields.io/badge/-iOS-gray.svg?style=flat) @@ -12,8 +12,6 @@ Kim is a Kotlin Multiplatform library for reading and writing image metadata. -It's part of [Ashampoo Photo Organizer](https://ashampoo.com/photo-organizer). - ## Features * JPG: Read & Write EXIF, IPTC & XMP @@ -21,6 +19,7 @@ It's part of [Ashampoo Photo Organizer](https://ashampoo.com/photo-organizer). + Also read non-standard EXIF & IPTC from `tEXt`/`zTXt` chunk * WebP: Read & Write EXIF & XMP * HEIC / AVIF: Read EXIF & XMP + + Support for animated AVIF files (AV1 Image Sequence) * JXL: Read & Write EXIF & XMP of uncompressed files * TIFF / RAW: Read EXIF & XMP + Full support for Adobe DNG, Canon CR2, Canon CR3 & Fujifilm RAF @@ -29,17 +28,14 @@ It's part of [Ashampoo Photo Organizer](https://ashampoo.com/photo-organizer). + API for preview image extraction of DNG, CR2, CR3, RAF, NEF, ARW & RW2 * GIF: Read & Write XMP * Handling of XMP content through - [XMP Core for Kotlin Multiplatform](https://github.com/Ashampoo/xmpcore) + [XMP Core for Kotlin Multiplatform](https://github.com/StefanOltmann/xmpcore) * Convenient `Kim.update()` API to perform updates to the relevant places + JPG: Lossless rotation by modifying only one byte (where present) -The future development of features on our part is driven entirely by the needs -of Ashampoo Photo Organizer, which, in turn, is driven by user community feedback. - ## Installation ``` -implementation("com.ashampoo:kim:0.26.2") +implementation("de.stefan-oltmann:kim:0.29.0") ``` For the targets `wasmJs` & `js` you also need to specify this: @@ -53,8 +49,8 @@ implementation(npm("pako", "2.1.0")) ### Read metadata `Kim.readMetadata()` takes `kotlin.ByteArray` on all platforms and depending on -the platform also `kotlinx.io.files.Path`, Ktor `Source` & `ByteReadChannel`, -`java.io.File`, `java.io.InputStream`, `NSData` and `String` paths. +the platform also `kotlinx.io.files.Path`, `kotlinx.io.Source` (for usage with Ktor) & `ByteReadChannel`, +`java.io.File`, `java.io.InputStream`, `NSData` (iOS) and `String` paths. ```kotlin val bytes: ByteArray = loadBytes() @@ -75,7 +71,7 @@ println("Taken date: $takenDate") ### Create high level summary object -This creates an instance of [PhotoMetadata](src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt). +This creates an instance of [MetadataSummary](src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt). It contains the following: - Image size @@ -95,7 +91,7 @@ It contains the following: ```kotlin val bytes: ByteArray = loadBytes() -val photoMetadata = Kim.readMetadata(bytes).convertToPhotoMetadata() +val summary = Kim.readMetadata(bytes).convertToSummary() ``` ### Change orientation using low level API @@ -136,7 +132,7 @@ val newBytes = Kim.update( ) ``` -See [AbstractUpdaterTest](src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt) for more samples. +See [AbstractUpdaterTest](src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt) for more samples. ### Update thumbnail using Kim.update() API @@ -156,7 +152,7 @@ See the [Java example project](examples/kim-java-sample/src/main/java/Main.java) ## Limitations -* Inability to update EXIF, IPTC and XMP in JPG files simultaneously. +* Inability to update EXIF, IPTC, and XMP in JPG files simultaneously. * Does not read the image size and orientation for HEIC, AVIF & JPEG XL. * Does not read brotli compressed metadata of JPEG XL due to missing brotli KMP libs. * MakerNote support is experimental and limited. @@ -175,7 +171,7 @@ This approach extends to AVIF images, as they repurpose the same boxes. ## Contributions -Contributions to Ashampoo Kim are welcome! If you encounter any issues, +Contributions to Kim are welcome! If you encounter any issues, have suggestions for improvements, or would like to contribute new features, please feel free to submit a pull request. diff --git a/build.gradle.kts b/build.gradle.kts index 49246ca4..33a21a83 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,10 +21,10 @@ repositories { mavenCentral() } -val productName: String = "Ashampoo Kim" +val productName: String = "Kim" -description = productName -group = "com.ashampoo" +group = "de.stefan_oltmann.kim" +description = "Kotlin Image Metadata manipulation library" version = "0.0.0" gitVersioning.apply { @@ -85,7 +85,7 @@ kotlin { binaries { executable(setOf(NativeBuildType.RELEASE)) { baseName = "kim" - entryPoint = "com.ashampoo.kim.main" + entryPoint = "de.stefan_oltmann.kim.main" } staticLib(namePrefix = "", setOf(NativeBuildType.RELEASE)) { baseName = "kim" @@ -96,7 +96,7 @@ kotlin { linuxX64 { binaries { executable(setOf(NativeBuildType.RELEASE)) { - entryPoint = "com.ashampoo.kim.main" + entryPoint = "de.stefan_oltmann.kim.main" } staticLib(namePrefix = "", setOf(NativeBuildType.RELEASE)) { baseName = "kim" @@ -107,7 +107,7 @@ kotlin { linuxArm64 { binaries { executable(setOf(NativeBuildType.RELEASE)) { - entryPoint = "com.ashampoo.kim.main" + entryPoint = "de.stefan_oltmann.kim.main" } staticLib(namePrefix = "", setOf(NativeBuildType.RELEASE)) { baseName = "kim" @@ -151,7 +151,11 @@ kotlin { /* Kotlin Test */ implementation(kotlin("test")) + /* Multiplatform file access */ implementation(libs.kotlinx.io.core) + + /* Test resources */ + implementation(libs.resources) } } @@ -165,13 +169,12 @@ kotlin { /* Apple Silicon iOS Simulator */ iosSimulatorArm64(), /* macOS Devices */ - macosX64(), macosArm64() ).forEach { it.binaries.executable(setOf(NativeBuildType.RELEASE)) { baseName = "kim" - entryPoint = "com.ashampoo.kim.main" + entryPoint = "de.stefan_oltmann.kim.main" } it.binaries.framework( @@ -246,7 +249,6 @@ kotlin { val iosArm64Main by sourceSets.getting val iosX64Main by sourceSets.getting val iosSimulatorArm64Main by sourceSets.getting - val macosX64Main by sourceSets.getting val macosArm64Main by sourceSets.getting @Suppress("UnusedPrivateMember") // False positive @@ -259,14 +261,12 @@ kotlin { iosArm64Main.dependsOn(this) iosX64Main.dependsOn(this) iosSimulatorArm64Main.dependsOn(this) - macosX64Main.dependsOn(this) macosArm64Main.dependsOn(this) } val iosArm64Test by sourceSets.getting val iosX64Test by sourceSets.getting val iosSimulatorArm64Test by sourceSets.getting - val macosX64Test by sourceSets.getting val macosArm64Test by sourceSets.getting @Suppress("UnusedPrivateMember") // False positive @@ -277,7 +277,6 @@ kotlin { iosArm64Test.dependsOn(this) iosX64Test.dependsOn(this) iosSimulatorArm64Test.dependsOn(this) - macosX64Test.dependsOn(this) macosArm64Test.dependsOn(this) } @@ -324,7 +323,7 @@ tasks.getByPath("build").finalizedBy(writeVersion) // region Android setup android { - namespace = "com.ashampoo.kim" + namespace = "de.stefan_oltmann.kim" compileSdk = libs.versions.android.compile.sdk.get().toInt() buildToolsVersion = libs.versions.android.build.tools.get() @@ -361,7 +360,7 @@ mavenPublishing { signAllPublications() coordinates( - groupId = "com.ashampoo", + groupId = "de.stefan-oltmann", artifactId = "kim", version = version.toString() ) @@ -370,7 +369,7 @@ mavenPublishing { name = productName description = "Kotlin Multiplatform library for image metadata manipulation" - url = "https://github.com/Software-Rangers/kim" + url = "https://github.com/StefanOltmann/kim" licenses { license { @@ -379,25 +378,18 @@ mavenPublishing { } } - organization { - name = "Software Rangers GmbH" - url = "https://software-rangers.com/" - } - developers { developer { name = "Stefan Oltmann" url = "https://stefan-oltmann.de/" - organization = "Software Rangers GmbH" - organizationUrl = "https://software-rangers.com/" roles = listOf("maintainer", "developer") properties = mapOf("github" to "StefanOltmann") } } scm { - url = "https://github.com/Software-Rangers/kim" - connection = "scm:git:git://github.com/Software-Rangers/kim.git" + url = "https://github.com/StefanOltmann/kim" + connection = "scm:git:git://github.com/StefanOltmann/kim.git" } } } diff --git a/detekt.yml b/detekt.yml index f6a4576a..f2fa033b 100644 --- a/detekt.yml +++ b/detekt.yml @@ -366,7 +366,7 @@ naming: privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*' PackageNaming: active: true - packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*' + packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9_]*)*' TopLevelPropertyNaming: active: true constantPattern: '[A-Z][_A-Z0-9]*' diff --git a/examples/kim-java-sample/build.gradle b/examples/kim-java-sample/build.gradle index 435e6834..8dbaba2c 100644 --- a/examples/kim-java-sample/build.gradle +++ b/examples/kim-java-sample/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' } -group = 'com.ashampoo' +group = 'de.stefan-oltmann' version = '1.0-SNAPSHOT' repositories { @@ -10,7 +10,7 @@ repositories { } dependencies { - implementation 'com.ashampoo:kim:0.18.4' + implementation 'de.stefan-oltmann:kim:0.27.0' } // Needed to make it work for the Gradle java plugin diff --git a/examples/kim-java-sample/src/main/java/Main.java b/examples/kim-java-sample/src/main/java/Main.java index 4c923c25..0fdbb535 100644 --- a/examples/kim-java-sample/src/main/java/Main.java +++ b/examples/kim-java-sample/src/main/java/Main.java @@ -1,10 +1,10 @@ -import com.ashampoo.kim.Kim; -import com.ashampoo.kim.format.ImageMetadata; -import com.ashampoo.kim.input.ByteReader; -import com.ashampoo.kim.input.JvmInputStreamByteReader; -import com.ashampoo.kim.jvm.KimJvm; -import com.ashampoo.kim.model.MetadataUpdate; -import com.ashampoo.kim.output.ByteArrayByteWriter; +import de.stefan_oltmann.kim.Kim; +import de.stefan_oltmann.kim.format.ImageMetadata; +import de.stefan_oltmann.kim.input.ByteReader; +import de.stefan_oltmann.kim.input.JvmInputStreamByteReader; +import de.stefan_oltmann.kim.jvm.KimJvm; +import de.stefan_oltmann.kim.model.MetadataUpdate; +import de.stefan_oltmann.kim.output.ByteArrayByteWriter; import java.io.File; import java.io.FileInputStream; diff --git a/examples/kim-kotlin-jvm-sample/build.gradle.kts b/examples/kim-kotlin-jvm-sample/build.gradle.kts index bc44f067..d647d9e9 100644 --- a/examples/kim-kotlin-jvm-sample/build.gradle.kts +++ b/examples/kim-kotlin-jvm-sample/build.gradle.kts @@ -2,7 +2,7 @@ plugins { kotlin("jvm") version "2.0.0" } -group = "com.ashampoo" +group = "de.stefan-oltmann" version = "1.0-SNAPSHOT" repositories { @@ -10,5 +10,5 @@ repositories { } dependencies { - implementation("com.ashampoo:kim:0.18.4") + implementation("de.stefan-oltmann:kim:0.27.0") } diff --git a/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt b/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt index 050ce50b..41627baa 100644 --- a/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt +++ b/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt @@ -1,20 +1,20 @@ -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.format.jpeg.JpegRewriter -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.GeoTiffTag -import com.ashampoo.kim.format.tiff.write.TiffOutputSet -import com.ashampoo.kim.format.tiff.write.TiffWriterLossy -import com.ashampoo.kim.input.DefaultRandomAccessByteReader -import com.ashampoo.kim.input.JvmInputStreamByteReader -import com.ashampoo.kim.input.KotlinIoSourceByteReader -import com.ashampoo.kim.input.use -import com.ashampoo.kim.jvm.readMetadata -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.OutputStreamByteWriter +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.format.jpeg.JpegRewriter +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy +import de.stefan_oltmann.kim.input.DefaultRandomAccessByteReader +import de.stefan_oltmann.kim.input.JvmInputStreamByteReader +import de.stefan_oltmann.kim.input.KotlinIoSourceByteReader +import de.stefan_oltmann.kim.input.use +import de.stefan_oltmann.kim.jvm.readMetadata +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.OutputStreamByteWriter import java.io.File fun main() { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f8da53ff..bb67d39d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,31 +1,32 @@ [versions] -kotlin = "2.2.0" -android-gradle = "8.9.3" +kotlin = "2.3.20" +android-gradle = "8.13.2" android-compile-sdk = "36" android-build-tools = "36.0.0" android-min-sdk = "21" detekt = "1.23.8" -kover = "0.9.1" +kover = "0.9.8" build-time-tracker = "5.0.1" git-versioning = "6.4.4" -resources = "0.10.1" -versions-plugin = "0.52.0" -maven-publish = "0.34.0" +resources = "0.15.0" +versions-plugin = "0.53.0" +maven-publish = "0.36.0" -ktor = "3.2.3" -xmpcore = "1.6.1" +ktor = "3.4.2" +xmpcore = "1.7.0" kotlinx-datetime = "0.7.1" -kotlinx-io = "0.8.0" +kotlinx-io = "0.9.0" kotlinx-browser = "0.3" pako = "2.1.0" [libraries] kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } -xmpcore = { module = "com.ashampoo:xmpcore", version.ref = "xmpcore" } +xmpcore = { module = "de.stefan-oltmann:xmpcore", version.ref = "xmpcore" } kotlinx-io-core = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinx-io" } ktor-io = { module = "io.ktor:ktor-io", version.ref = "ktor" } kotlinx-browser = { module = "org.jetbrains.kotlinx:kotlinx-browser", version.ref = "kotlinx-browser" } detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } +resources = { module = "com.goncalossilva:resources", version.ref = "resources" } [plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa02b02f..5b59ea8e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/androidMain/kotlin/com/ashampoo/kim/android/ContentResolverExtensions.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/ContentResolverExtensions.kt similarity index 98% rename from src/androidMain/kotlin/com/ashampoo/kim/android/ContentResolverExtensions.kt rename to src/androidMain/kotlin/de/stefan_oltmann/kim/android/ContentResolverExtensions.kt index 9a657f6f..0d6fcb37 100644 --- a/src/androidMain/kotlin/com/ashampoo/kim/android/ContentResolverExtensions.kt +++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/ContentResolverExtensions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.android +package de.stefan_oltmann.kim.android import android.content.ContentResolver import android.net.Uri diff --git a/src/androidMain/kotlin/com/ashampoo/kim/android/KimAndroid.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/KimAndroid.kt similarity index 88% rename from src/androidMain/kotlin/com/ashampoo/kim/android/KimAndroid.kt rename to src/androidMain/kotlin/de/stefan_oltmann/kim/android/KimAndroid.kt index 4073c83f..21ea94a2 100644 --- a/src/androidMain/kotlin/com/ashampoo/kim/android/KimAndroid.kt +++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/KimAndroid.kt @@ -13,20 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.android +package de.stefan_oltmann.kim.android import android.content.ContentResolver import android.content.Context import android.net.Uri import android.os.Build -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.input.AndroidInputStreamByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.kim.output.OutputStreamByteWriter +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.input.AndroidInputStreamByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.OutputStreamByteWriter import java.io.File import java.io.InputStream @@ -37,7 +37,7 @@ public object KimAndroid { @JvmStatic @Throws(ImageReadException::class) - public fun readMetadata(inputStream: InputStream, length: Long): ImageMetadata? = + public fun readMetadata(inputStream: InputStream, length: Long): MediaMetadata? = Kim.readMetadata( byteReader = AndroidInputStreamByteReader( inputStream = inputStream, @@ -47,12 +47,12 @@ public object KimAndroid { @JvmStatic @Throws(ImageReadException::class) - public fun readMetadata(path: String): ImageMetadata? = + public fun readMetadata(path: String): MediaMetadata? = readMetadata(File(path)) @JvmStatic @Throws(ImageReadException::class) - public fun readMetadata(file: File): ImageMetadata? { + public fun readMetadata(file: File): MediaMetadata? { if (!file.exists()) throw ImageReadException("File does not exist: $file") @@ -69,7 +69,7 @@ public object KimAndroid { context: Context, uri: String, length: Long? = null - ): ImageMetadata? = + ): MediaMetadata? = Kim.readMetadata( byteReader = createByteReader( contentResolver = context.contentResolver, @@ -84,7 +84,7 @@ public object KimAndroid { contentResolver: ContentResolver, uri: String, length: Long? = null - ): ImageMetadata? = + ): MediaMetadata? = Kim.readMetadata( byteReader = createByteReader( contentResolver = contentResolver, @@ -209,15 +209,15 @@ public object KimAndroid { } @Throws(ImageReadException::class) -public fun Kim.readMetadata(inputStream: InputStream, length: Long): ImageMetadata? = +public fun Kim.readMetadata(inputStream: InputStream, length: Long): MediaMetadata? = KimAndroid.readMetadata(inputStream, length) @Throws(ImageReadException::class) -public fun Kim.readMetadata(path: String): ImageMetadata? = +public fun Kim.readMetadata(path: String): MediaMetadata? = KimAndroid.readMetadata(path) @Throws(ImageReadException::class) -public fun Kim.readMetadata(file: File): ImageMetadata? = +public fun Kim.readMetadata(file: File): MediaMetadata? = KimAndroid.readMetadata(file) @Throws(ImageReadException::class) @@ -225,7 +225,7 @@ public fun Kim.readMetadata( context: Context, uri: String, length: Long? = null -): ImageMetadata? = +): MediaMetadata? = KimAndroid.readMetadata(context, uri, length) @Throws(ImageReadException::class) @@ -233,5 +233,5 @@ public fun Kim.readMetadata( contentResolver: ContentResolver, uri: String, length: Long? = null -): ImageMetadata? = +): MediaMetadata? = KimAndroid.readMetadata(contentResolver, uri, length) diff --git a/src/androidMain/kotlin/com/ashampoo/kim/common/ZLib.android.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/common/ZLib.android.kt similarity index 97% rename from src/androidMain/kotlin/com/ashampoo/kim/common/ZLib.android.kt rename to src/androidMain/kotlin/de/stefan_oltmann/kim/common/ZLib.android.kt index 3f71f198..4a6ae517 100644 --- a/src/androidMain/kotlin/com/ashampoo/kim/common/ZLib.android.kt +++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/common/ZLib.android.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import java.io.ByteArrayOutputStream import java.util.zip.Deflater diff --git a/src/androidMain/kotlin/com/ashampoo/kim/input/AndroidInputStreamByteReader.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/input/AndroidInputStreamByteReader.kt similarity index 95% rename from src/androidMain/kotlin/com/ashampoo/kim/input/AndroidInputStreamByteReader.kt rename to src/androidMain/kotlin/de/stefan_oltmann/kim/input/AndroidInputStreamByteReader.kt index fecabd6f..8b430f8e 100644 --- a/src/androidMain/kotlin/com/ashampoo/kim/input/AndroidInputStreamByteReader.kt +++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/input/AndroidInputStreamByteReader.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input import android.os.Build -import com.ashampoo.kim.common.slice +import de.stefan_oltmann.kim.common.slice import java.io.InputStream /** diff --git a/src/androidMain/kotlin/com/ashampoo/kim/output/OutputStreamByteWriter.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/output/OutputStreamByteWriter.kt similarity index 96% rename from src/androidMain/kotlin/com/ashampoo/kim/output/OutputStreamByteWriter.kt rename to src/androidMain/kotlin/de/stefan_oltmann/kim/output/OutputStreamByteWriter.kt index 946198a8..93656e58 100644 --- a/src/androidMain/kotlin/com/ashampoo/kim/output/OutputStreamByteWriter.kt +++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/output/OutputStreamByteWriter.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output import java.io.OutputStream diff --git a/src/androidUnitTest/kotlin/com/ashampoo/kim/ResourcePath.android.kt b/src/androidUnitTest/kotlin/com/ashampoo/kim/ResourcePath.android.kt deleted file mode 100644 index 067606ef..00000000 --- a/src/androidUnitTest/kotlin/com/ashampoo/kim/ResourcePath.android.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -actual fun getPathForResource(path: String): String = path diff --git a/src/appleMain/kotlin/com/ashampoo/kim/apple/KimApple.kt b/src/appleMain/kotlin/de/stefan_oltmann/kim/apple/KimApple.kt similarity index 78% rename from src/appleMain/kotlin/com/ashampoo/kim/apple/KimApple.kt rename to src/appleMain/kotlin/de/stefan_oltmann/kim/apple/KimApple.kt index 19417fc6..a8f30268 100644 --- a/src/appleMain/kotlin/com/ashampoo/kim/apple/KimApple.kt +++ b/src/appleMain/kotlin/de/stefan_oltmann/kim/apple/KimApple.kt @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.apple +package de.stefan_oltmann.kim.apple -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.readFileAsByteArray -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.readFileAsByteArray +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.input.ByteArrayByteReader import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.addressOf import kotlinx.cinterop.usePinned @@ -32,11 +32,11 @@ import platform.posix.memcpy public object KimApple { @Throws(ImageReadException::class) - public fun readMetadata(data: NSData): ImageMetadata? = + public fun readMetadata(data: NSData): MediaMetadata? = Kim.readMetadata(ByteArrayByteReader(convertDataToByteArray(data))) @Throws(ImageReadException::class) - public fun readMetadata(path: String): ImageMetadata? { + public fun readMetadata(path: String): MediaMetadata? { val fileBytes = readFileAsByteArray(path) ?: return null @@ -45,11 +45,11 @@ public object KimApple { } @Throws(ImageReadException::class) -public fun Kim.readMetadata(data: NSData): ImageMetadata? = +public fun Kim.readMetadata(data: NSData): MediaMetadata? = KimApple.readMetadata(data) @Throws(ImageReadException::class) -public fun Kim.readMetadata(path: String): ImageMetadata? = +public fun Kim.readMetadata(path: String): MediaMetadata? = KimApple.readMetadata(path) @OptIn(ExperimentalForeignApi::class) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageParser.kt b/src/commonMain/kotlin/com/ashampoo/kim/format/ImageParser.kt deleted file mode 100644 index 5bcb66da..00000000 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageParser.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim.format - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.bmff.BaseMediaFileFormatImageParser -import com.ashampoo.kim.format.gif.GifImageParser -import com.ashampoo.kim.format.jpeg.JpegImageParser -import com.ashampoo.kim.format.png.PngImageParser -import com.ashampoo.kim.format.raf.RafImageParser -import com.ashampoo.kim.format.tiff.TiffImageParser -import com.ashampoo.kim.format.webp.WebPImageParser -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.model.ImageFormat -import kotlin.jvm.JvmStatic - -public fun interface ImageParser { - - @Throws(ImageReadException::class) - public fun parseMetadata(byteReader: ByteReader): ImageMetadata - - public companion object { - - @JvmStatic - public fun forFormat(imageFormat: ImageFormat): ImageParser? = - when (imageFormat) { - - ImageFormat.JPEG -> JpegImageParser - - ImageFormat.PNG -> PngImageParser - - ImageFormat.WEBP -> WebPImageParser - - ImageFormat.TIFF, - ImageFormat.CR2, - ImageFormat.NEF, - ImageFormat.ARW, - ImageFormat.RW2, - ImageFormat.ORF -> TiffImageParser - - ImageFormat.RAF -> RafImageParser - - ImageFormat.HEIC, - ImageFormat.AVIF, - ImageFormat.CR3, - ImageFormat.JXL -> BaseMediaFileFormatImageParser - - ImageFormat.GIF -> GifImageParser - - else -> null - } - } -} diff --git a/src/commonMain/kotlin/com/ashampoo/kim/Kim.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/Kim.kt similarity index 56% rename from src/commonMain/kotlin/com/ashampoo/kim/Kim.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/Kim.kt index e50fde38..4951a738 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/Kim.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/Kim.kt @@ -13,40 +13,40 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.common.tryWithImageWriteException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.arw.ArwPreviewExtractor -import com.ashampoo.kim.format.cr2.Cr2PreviewExtractor -import com.ashampoo.kim.format.cr3.Cr3PreviewExtractor -import com.ashampoo.kim.format.dng.DngPreviewExtractor -import com.ashampoo.kim.format.gif.GifMetadataExtractor -import com.ashampoo.kim.format.gif.GifUpdater -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor -import com.ashampoo.kim.format.jpeg.JpegUpdater -import com.ashampoo.kim.format.jxl.JxlUpdater -import com.ashampoo.kim.format.nef.NefPreviewExtractor -import com.ashampoo.kim.format.png.PngMetadataExtractor -import com.ashampoo.kim.format.png.PngUpdater -import com.ashampoo.kim.format.raf.RafMetadataExtractor -import com.ashampoo.kim.format.raf.RafPreviewExtractor -import com.ashampoo.kim.format.rw2.Rw2PreviewExtractor -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.format.webp.WebPUpdater -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.DefaultRandomAccessByteReader -import com.ashampoo.kim.input.PrePendingByteReader -import com.ashampoo.kim.input.use -import com.ashampoo.kim.model.ImageFormat -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter +package de.stefan_oltmann.kim + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.common.tryWithImageWriteException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.arw.ArwPreviewExtractor +import de.stefan_oltmann.kim.format.cr2.Cr2PreviewExtractor +import de.stefan_oltmann.kim.format.cr3.Cr3PreviewExtractor +import de.stefan_oltmann.kim.format.dng.DngPreviewExtractor +import de.stefan_oltmann.kim.format.gif.GifMetadataExtractor +import de.stefan_oltmann.kim.format.gif.GifUpdater +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor +import de.stefan_oltmann.kim.format.jpeg.JpegUpdater +import de.stefan_oltmann.kim.format.jxl.JxlUpdater +import de.stefan_oltmann.kim.format.nef.NefPreviewExtractor +import de.stefan_oltmann.kim.format.png.PngMetadataExtractor +import de.stefan_oltmann.kim.format.png.PngUpdater +import de.stefan_oltmann.kim.format.raf.RafMetadataExtractor +import de.stefan_oltmann.kim.format.raf.RafPreviewExtractor +import de.stefan_oltmann.kim.format.rw2.Rw2PreviewExtractor +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.webp.WebPUpdater +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.DefaultRandomAccessByteReader +import de.stefan_oltmann.kim.input.PrePendingByteReader +import de.stefan_oltmann.kim.input.use +import de.stefan_oltmann.kim.model.MediaFormat +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter public object Kim { @@ -54,7 +54,7 @@ public object Kim { @kotlin.jvm.JvmStatic @Throws(ImageReadException::class) - public fun readMetadata(bytes: ByteArray): ImageMetadata? = + public fun readMetadata(bytes: ByteArray): MediaMetadata? = if (bytes.isEmpty()) null else @@ -64,54 +64,54 @@ public object Kim { @Throws(ImageReadException::class) public fun readMetadata( byteReader: ByteReader - ): ImageMetadata? = tryWithImageReadException { + ): MediaMetadata? = tryWithImageReadException { byteReader.use { - val headerBytes = it.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) + val headerBytes = it.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) - val imageFormat = ImageFormat.detect(headerBytes) ?: return@use null + val mediaFormat = MediaFormat.detect(headerBytes) ?: return@use null - val imageParser = ImageParser.forFormat(imageFormat) - ?: return@use ImageMetadata(imageFormat, null, null, null, null, null) + val imageParser = ImageParser.forFormat(mediaFormat) + ?: return@use MediaMetadata.createEmpty (mediaFormat) val newReader = PrePendingByteReader(it, headerBytes.toList()) /* - * We re-apply the ImageFormat, because we don't want to report + * We re-apply the MediaFormat here, because we don't want to report * "TIFF" for every TIFF-based RAW format like CR2. */ return@use imageParser - .parseMetadata(newReader) - .copy(imageFormat = imageFormat) + .parseMetadata(byteReader = newReader) + .withMediaFormat(mediaFormat = mediaFormat) } } /** * Determines the file type based on file header and returns metadata bytes. * - * Cloud services can not reliably tell the mime type, and so we must determine it. + * Cloud services can not reliably tell the mime type, so we must determine it. */ @kotlin.jvm.JvmStatic @Throws(ImageReadException::class) public fun extractMetadataBytes( byteReader: ByteReader - ): Pair = tryWithImageReadException { + ): Pair = tryWithImageReadException { byteReader.use { - val headerBytes = it.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) + val headerBytes = it.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) - val imageFormat = ImageFormat.detect(headerBytes) + val mediaFormat = MediaFormat.detect(headerBytes) val newReader = PrePendingByteReader(it, headerBytes.toList()) - return@use when (imageFormat) { - ImageFormat.JPEG -> imageFormat to JpegMetadataExtractor.extractMetadataBytes(newReader) - ImageFormat.PNG -> imageFormat to PngMetadataExtractor.extractMetadataBytes(newReader) - ImageFormat.RAF -> imageFormat to RafMetadataExtractor.extractMetadataBytes(newReader) - ImageFormat.GIF -> imageFormat to GifMetadataExtractor.extractMetadataBytes(newReader) - else -> imageFormat to byteArrayOf() + return@use when (mediaFormat) { + MediaFormat.JPEG -> mediaFormat to JpegMetadataExtractor.extractMetadataBytes(newReader) + MediaFormat.PNG -> mediaFormat to PngMetadataExtractor.extractMetadataBytes(newReader) + MediaFormat.RAF -> mediaFormat to RafMetadataExtractor.extractMetadataBytes(newReader) + MediaFormat.GIF -> mediaFormat to GifMetadataExtractor.extractMetadataBytes(newReader) + else -> mediaFormat to byteArrayOf() } } } @@ -124,16 +124,16 @@ public object Kim { byteReader.use { - val headerBytes = it.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) + val headerBytes = it.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) - val imageFormat = ImageFormat.detect(headerBytes) + val mediaFormat = MediaFormat.detect(headerBytes) val prePendingByteReader = PrePendingByteReader(it, headerBytes.toList()) - if (imageFormat == ImageFormat.RAF) + if (mediaFormat == MediaFormat.RAF) return@use RafPreviewExtractor.extractPreviewImage(prePendingByteReader) - if (imageFormat == ImageFormat.CR3) + if (mediaFormat == MediaFormat.CR3) return@use Cr3PreviewExtractor.extractPreviewImage(prePendingByteReader) val reader = DefaultRandomAccessByteReader(prePendingByteReader) @@ -144,13 +144,13 @@ public object Kim { * *Note:* Olympus ORF is currently unsupported because the preview offset * is burried in the Olympus MakerNotes, which are currently not interpreted. */ - return@use when (imageFormat) { + return@use when (mediaFormat) { - ImageFormat.CR2 -> Cr2PreviewExtractor.extractPreviewImage(tiffContents, reader) + MediaFormat.CR2 -> Cr2PreviewExtractor.extractPreviewImage(tiffContents, reader) - ImageFormat.RW2 -> Rw2PreviewExtractor.extractPreviewImage(tiffContents, reader) + MediaFormat.RW2 -> Rw2PreviewExtractor.extractPreviewImage(tiffContents, reader) - ImageFormat.TIFF -> { + MediaFormat.TIFF -> { /* It can now be DNG, NEF or ARW. */ DngPreviewExtractor.extractPreviewImage(tiffContents, reader)?.let { return@use it } @@ -206,20 +206,20 @@ public object Kim { update: MetadataUpdate ): Unit = tryWithImageWriteException { - val headerBytes = byteReader.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) + val headerBytes = byteReader.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION) - val imageFormat = ImageFormat.detect(headerBytes) + val mediaFormat = MediaFormat.detect(headerBytes) val prePendingByteReader = PrePendingByteReader(byteReader, headerBytes.toList()) - return@tryWithImageWriteException when (imageFormat) { - ImageFormat.JPEG -> JpegUpdater.update(prePendingByteReader, byteWriter, update) - ImageFormat.PNG -> PngUpdater.update(prePendingByteReader, byteWriter, update) - ImageFormat.WEBP -> WebPUpdater.update(prePendingByteReader, byteWriter, update) - ImageFormat.JXL -> JxlUpdater.update(prePendingByteReader, byteWriter, update) - ImageFormat.GIF -> GifUpdater.update(prePendingByteReader, byteWriter, update) + return@tryWithImageWriteException when (mediaFormat) { + MediaFormat.JPEG -> JpegUpdater.update(prePendingByteReader, byteWriter, update) + MediaFormat.PNG -> PngUpdater.update(prePendingByteReader, byteWriter, update) + MediaFormat.WEBP -> WebPUpdater.update(prePendingByteReader, byteWriter, update) + MediaFormat.JXL -> JxlUpdater.update(prePendingByteReader, byteWriter, update) + MediaFormat.GIF -> GifUpdater.update(prePendingByteReader, byteWriter, update) null -> throw ImageWriteException("Unknown or unsupported file format.") - else -> throw ImageWriteException("Can't embed metadata into $imageFormat.") + else -> throw ImageWriteException("Can't embed metadata into $mediaFormat.") } } @@ -230,15 +230,15 @@ public object Kim { thumbnailBytes: ByteArray ): ByteArray = tryWithImageWriteException { - val imageFormat = ImageFormat.detect(bytes) + val mediaFormat = MediaFormat.detect(bytes) - return@tryWithImageWriteException when (imageFormat) { - ImageFormat.JPEG -> JpegUpdater.updateThumbnail(bytes, thumbnailBytes) - ImageFormat.PNG -> PngUpdater.updateThumbnail(bytes, thumbnailBytes) - ImageFormat.WEBP -> WebPUpdater.updateThumbnail(bytes, thumbnailBytes) - ImageFormat.JXL -> JxlUpdater.updateThumbnail(bytes, thumbnailBytes) + return@tryWithImageWriteException when (mediaFormat) { + MediaFormat.JPEG -> JpegUpdater.updateThumbnail(bytes, thumbnailBytes) + MediaFormat.PNG -> PngUpdater.updateThumbnail(bytes, thumbnailBytes) + MediaFormat.WEBP -> WebPUpdater.updateThumbnail(bytes, thumbnailBytes) + MediaFormat.JXL -> JxlUpdater.updateThumbnail(bytes, thumbnailBytes) null -> throw ImageWriteException("Unknown or unsupported file format.") - else -> throw ImageWriteException("Can't embed thumbnail into $imageFormat.") + else -> throw ImageWriteException("Can't embed thumbnail into $mediaFormat.") } } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteArrayExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensions.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/common/ByteArrayExtensions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensions.kt index 88f6433f..2b682bef 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteArrayExtensions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensions.kt @@ -15,7 +15,7 @@ */ @file:Suppress("MagicNumber", "TooManyFunctions") -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common internal const val HEX_RADIX: Int = 16 @@ -53,7 +53,7 @@ internal fun ByteArray.indexOfNullTerminator(): Int = indexOfNullTerminator(0) /** - * NUL is often used in image formats to terminate a string. + * NUL is often used in media formats to terminate a string. */ internal fun ByteArray.indexOfNullTerminator(start: Int): Int { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteConversions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteConversions.kt similarity index 99% rename from src/commonMain/kotlin/com/ashampoo/kim/common/ByteConversions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteConversions.kt index 53743c32..476fadea 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteConversions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteConversions.kt @@ -16,7 +16,7 @@ */ @file:Suppress("MagicNumber", "TooManyFunctions") -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common /** * Convenience methods for converting data types to and from diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteOrder.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteOrder.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/common/ByteOrder.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteOrder.kt index 95cd7e36..db96b6fd 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteOrder.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteOrder.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common public enum class ByteOrder( public val displayName: String diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/Exceptions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Exceptions.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/common/Exceptions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/Exceptions.kt index 887291fe..03d99ded 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/Exceptions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Exceptions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common public open class ImageException(message: String? = null, cause: Throwable? = null) : RuntimeException(message, cause) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ExifDateUtil.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ExifDateUtil.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/common/ExifDateUtil.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ExifDateUtil.kt index 3507be05..ecedaf2b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/ExifDateUtil.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ExifDateUtil.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common private val emptyExifDateStrings = setOf( "0000:00:00 00:00:00", diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/FourCC.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/FourCC.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/common/FourCC.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/FourCC.kt index 386d3c94..afd4dd55 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/FourCC.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/FourCC.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common /** * See https://en.wikipedia.org/wiki/FourCC diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/GpsUtil.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/GpsUtil.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/common/GpsUtil.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/GpsUtil.kt index f996c639..15fa2ae6 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/GpsUtil.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/GpsUtil.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.math.abs import kotlin.math.pow diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoValueFormatter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/KimValueFormatter.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/common/PhotoValueFormatter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/KimValueFormatter.kt index e980f451..d65d999b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoValueFormatter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/KimValueFormatter.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.math.round -public object PhotoValueFormatter { +public object KimValueFormatter { public const val MEGA_PIXEL_COUNT: Int = 1_000_000 diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.kt index d04d10d3..a6b7e93c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common internal expect fun ByteArray.decodeLatin1BytesToString(): String diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensions.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensions.kt index 80e3bc53..daa8e468 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlinx.datetime.LocalDateTime import kotlinx.datetime.number diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataOffset.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataOffset.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/common/MetadataOffset.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataOffset.kt index ac9c7136..674bc71b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataOffset.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataOffset.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common public data class MetadataOffset( val type: MetadataType, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoMetadataConverter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverter.kt similarity index 73% rename from src/commonMain/kotlin/com/ashampoo/kim/common/PhotoMetadataConverter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverter.kt index 95c2f5bf..4ba4975b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoMetadataConverter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverter.kt @@ -13,22 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common - -import com.ashampoo.kim.Kim.underUnitTesting -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.jpeg.JpegImageParser -import com.ashampoo.kim.format.jpeg.iptc.IptcTypes -import com.ashampoo.kim.format.tiff.GPSInfo -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.format.xmp.XmpReader -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.model.GpsCoordinates -import com.ashampoo.kim.model.LocationShown -import com.ashampoo.kim.model.PhotoMetadata -import com.ashampoo.kim.model.TiffOrientation +package de.stefan_oltmann.kim.common + +import de.stefan_oltmann.kim.Kim.underUnitTesting +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.jpeg.JpegImageParser +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes +import de.stefan_oltmann.kim.format.tiff.GPSInfo +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.format.xmp.XmpReader +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.model.GpsCoordinates +import de.stefan_oltmann.kim.model.LocationShown +import de.stefan_oltmann.kim.model.MetadataSummary +import de.stefan_oltmann.kim.model.TiffOrientation import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone import kotlinx.datetime.toInstant @@ -40,50 +40,50 @@ import kotlin.time.ExperimentalTime * This is a dedicated object with @JvmStatic methods * to provide a better API to pure Java projects. */ -public object PhotoMetadataConverter { +public object MetadataSummaryConverter { @JvmStatic @JvmOverloads @Suppress("LongMethod") - public fun convertToPhotoMetadata( - imageMetadata: ImageMetadata, + public fun convertToSummary( + mediaMetadata: MediaMetadata, ignoreOrientation: Boolean = false - ): PhotoMetadata { + ): MetadataSummary { - val xmpMetadata: PhotoMetadata? = imageMetadata.xmp?.let { + val xmpMetadata: MetadataSummary? = mediaMetadata.xmp?.let { XmpReader.readMetadata(it) } val orientation = if (ignoreOrientation) TiffOrientation.STANDARD else - TiffOrientation.of(imageMetadata.findShortValue(TiffTag.TIFF_TAG_ORIENTATION)?.toInt()) + TiffOrientation.of(mediaMetadata.findShortValue(TiffTag.TIFF_TAG_ORIENTATION)?.toInt()) val takenDateMillis: Long? = xmpMetadata?.takenDate - ?: extractTakenDateMillisFromExif(imageMetadata) + ?: extractTakenDateMillisFromExif(mediaMetadata) val gpsCoordinates: GpsCoordinates? = xmpMetadata?.gpsCoordinates - ?: extractGpsCoordinatesFromExif(imageMetadata) + ?: extractGpsCoordinatesFromExif(mediaMetadata) - val cameraMake = imageMetadata.findStringValue(TiffTag.TIFF_TAG_MAKE) - val cameraModel = imageMetadata.findStringValue(TiffTag.TIFF_TAG_MODEL) + val cameraMake = mediaMetadata.findStringValue(TiffTag.TIFF_TAG_MAKE) + val cameraModel = mediaMetadata.findStringValue(TiffTag.TIFF_TAG_MODEL) - val lensMake = imageMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MAKE) - val lensModel = imageMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MODEL) + val lensMake = mediaMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MAKE) + val lensModel = mediaMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MODEL) /* Look for ISO at the standard place and fall back to test RW2 logic. */ - val iso = imageMetadata.findShortValue(ExifTag.EXIF_TAG_ISO) - ?: imageMetadata.findShortValue(ExifTag.EXIF_TAG_ISO_PANASONIC) + val iso = mediaMetadata.findShortValue(ExifTag.EXIF_TAG_ISO) + ?: mediaMetadata.findShortValue(ExifTag.EXIF_TAG_ISO_PANASONIC) - val exposureTime = imageMetadata.findDoubleValue(ExifTag.EXIF_TAG_EXPOSURE_TIME) - val fNumber = imageMetadata.findDoubleValue(ExifTag.EXIF_TAG_FNUMBER) - val focalLength = imageMetadata.findDoubleValue(ExifTag.EXIF_TAG_FOCAL_LENGTH) + val exposureTime = mediaMetadata.findDoubleValue(ExifTag.EXIF_TAG_EXPOSURE_TIME) + val fNumber = mediaMetadata.findDoubleValue(ExifTag.EXIF_TAG_FNUMBER) + val focalLength = mediaMetadata.findDoubleValue(ExifTag.EXIF_TAG_FOCAL_LENGTH) val keywords = xmpMetadata?.keywords?.ifEmpty { - extractKeywordsFromIptc(imageMetadata) - } ?: extractKeywordsFromIptc(imageMetadata) + extractKeywordsFromIptc(mediaMetadata) + } ?: extractKeywordsFromIptc(mediaMetadata) - val iptcRecords = imageMetadata.iptc?.records + val iptcRecords = mediaMetadata.iptc?.records val title = xmpMetadata?.title ?: iptcRecords ?.find { it.iptcType == IptcTypes.OBJECT_NAME } @@ -94,9 +94,9 @@ public object PhotoMetadataConverter { ?.value val location = xmpMetadata?.locationShown - ?: extractLocationFromIptc(imageMetadata) + ?: extractLocationFromIptc(mediaMetadata) - val thumbnailBytes = imageMetadata.getExifThumbnailBytes() + val thumbnailBytes = mediaMetadata.getExifThumbnailBytes() val thumbnailImageSize = thumbnailBytes?.let { JpegImageParser.getImageSize( @@ -112,10 +112,10 @@ public object PhotoMetadataConverter { * Resolution, orientation and capture parameters (camera make, * iso, exposure time, etc.) are always taken from EXIF. */ - return PhotoMetadata( - imageFormat = imageMetadata.imageFormat, - widthPx = imageMetadata.imageSize?.width, - heightPx = imageMetadata.imageSize?.height, + return MetadataSummary( + mediaFormat = mediaMetadata.mediaFormat, + widthPx = mediaMetadata.imageSize?.width, + heightPx = mediaMetadata.imageSize?.height, orientation = orientation, takenDate = takenDateMillis, gpsCoordinates = gpsCoordinates, @@ -135,14 +135,13 @@ public object PhotoMetadataConverter { keywords = keywords, faces = xmpMetadata?.faces ?: emptyMap(), personsInImage = xmpMetadata?.personsInImage ?: emptySet(), - albums = xmpMetadata?.albums ?: emptySet(), thumbnailImageSize = thumbnailImageSize, thumbnailBytes = thumbnailBytes ) } @JvmStatic - private fun extractTakenDateAsIsoString(metadata: ImageMetadata): String? { + private fun extractTakenDateAsIsoString(metadata: MediaMetadata): String? { val takenDateField = metadata.findTiffField(ExifTag.EXIF_TAG_DATE_TIME_ORIGINAL) ?: return null @@ -164,7 +163,7 @@ public object PhotoMetadataConverter { @OptIn(ExperimentalTime::class) @JvmStatic private fun extractTakenDateMillisFromExif( - metadata: ImageMetadata + metadata: MediaMetadata ): Long? { try { @@ -208,7 +207,7 @@ public object PhotoMetadataConverter { @JvmStatic private fun extractGpsCoordinatesFromExif( - metadata: ImageMetadata + metadata: MediaMetadata ): GpsCoordinates? { val gpsDirectory = metadata.findTiffDirectory(TiffConstants.TIFF_DIRECTORY_GPS) @@ -229,7 +228,7 @@ public object PhotoMetadataConverter { @JvmStatic private fun extractKeywordsFromIptc( - metadata: ImageMetadata + metadata: MediaMetadata ): Set { return metadata.iptc?.records @@ -241,7 +240,7 @@ public object PhotoMetadataConverter { @JvmStatic private fun extractLocationFromIptc( - metadata: ImageMetadata + metadata: MediaMetadata ): LocationShown? { val iptcRecords = metadata.iptc?.records @@ -273,11 +272,11 @@ public object PhotoMetadataConverter { } } -public fun ImageMetadata.convertToPhotoMetadata( +public fun MediaMetadata.convertToSummary( ignoreOrientation: Boolean = false -): PhotoMetadata = - PhotoMetadataConverter.convertToPhotoMetadata( - imageMetadata = this, +): MetadataSummary = + MetadataSummaryConverter.convertToSummary( + mediaMetadata = this, ignoreOrientation = ignoreOrientation ) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataType.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/common/MetadataType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataType.kt index 6fd5dd6f..3216da31 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataType.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common public enum class MetadataType { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumber.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumber.kt similarity index 99% rename from src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumber.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumber.kt index de798dcd..01e1cc8d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumber.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumber.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.math.abs import kotlin.math.absoluteValue diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumbers.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumbers.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumbers.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumbers.kt index 0a5d8ced..3858358e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumbers.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumbers.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common /** * To avoid rather unsafe "Array<*>" in instance checking we have this diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ZLib.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ZLib.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/common/ZLib.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ZLib.kt index f5e28c30..8a653282 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/common/ZLib.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ZLib.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common internal expect fun compress(input: String): ByteArray diff --git a/src/commonMain/kotlin/de/stefan_oltmann/kim/format/ImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/ImageParser.kt new file mode 100644 index 00000000..bd1fd292 --- /dev/null +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/ImageParser.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2025 Ashampoo GmbH & Co. KG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.stefan_oltmann.kim.format + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.bmff.BaseMediaFileFormatImageParser +import de.stefan_oltmann.kim.format.gif.GifImageParser +import de.stefan_oltmann.kim.format.jpeg.JpegImageParser +import de.stefan_oltmann.kim.format.png.PngImageParser +import de.stefan_oltmann.kim.format.raf.RafImageParser +import de.stefan_oltmann.kim.format.tiff.TiffImageParser +import de.stefan_oltmann.kim.format.webp.WebPImageParser +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.model.MediaFormat +import kotlin.jvm.JvmStatic + +public fun interface ImageParser { + + @Throws(ImageReadException::class) + public fun parseMetadata(byteReader: ByteReader): MediaMetadata + + public companion object { + + @JvmStatic + public fun forFormat(mediaFormat: MediaFormat): ImageParser? = + when (mediaFormat) { + + MediaFormat.JPEG -> JpegImageParser + + MediaFormat.PNG -> PngImageParser + + MediaFormat.WEBP -> WebPImageParser + + MediaFormat.TIFF, + MediaFormat.CR2, + MediaFormat.NEF, + MediaFormat.ARW, + MediaFormat.RW2, + MediaFormat.ORF -> TiffImageParser + + MediaFormat.RAF -> RafImageParser + + MediaFormat.HEIC, + MediaFormat.AVIF, + MediaFormat.CR3, + MediaFormat.JXL -> BaseMediaFileFormatImageParser + + MediaFormat.GIF -> GifImageParser + + else -> null + } + } +} diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageFormatMagicNumbers.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaFormatMagicNumbers.kt similarity index 67% rename from src/commonMain/kotlin/com/ashampoo/kim/format/ImageFormatMagicNumbers.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaFormatMagicNumbers.kt index 0ae9311b..ab25d01b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageFormatMagicNumbers.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaFormatMagicNumbers.kt @@ -1,4 +1,6 @@ /* + * Copyright 2026 Ramon Bouckaert + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format +package de.stefan_oltmann.kim.format /** * See https://en.wikipedia.org/wiki/List_of_file_signatures @@ -22,7 +24,7 @@ package com.ashampoo.kim.format * For example HEIC has a broad number of different headers bytes. */ @Suppress("MagicNumber") -public object ImageFormatMagicNumbers { +public object MediaFormatMagicNumbers { public val jpeg: List = byteListOf( 0xFF, 0xD8 @@ -78,56 +80,96 @@ public object ImageFormatMagicNumbers { 0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50 ) - /* 4 bytes + "ftypheic" */ + /** 4 bytes + "ftypheic" */ public val heic: List = byteListOf( null, null, null, null ).plus("ftypheic".encodeToByteArray().toList()) - /* A HEIC brand */ + /** A HEIC brand */ public val mif1: List = byteListOf( null, null, null, null ).plus("ftypmif1".encodeToByteArray().toList()) - /* A HEIC brand */ + /** A HEIC brand */ public val msf1: List = byteListOf( null, null, null, null ).plus("ftypmsf1".encodeToByteArray().toList()) - /* A HEIC brand */ + /** A HEIC brand */ public val heix: List = byteListOf( null, null, null, null ).plus("ftypheix".encodeToByteArray().toList()) - /* A HEIC brand */ + /** A HEIC brand */ public val hevc: List = byteListOf( null, null, null, null ).plus("ftyphevc".encodeToByteArray().toList()) - /* A HEIC brand */ + /** A HEIC brand */ public val hevx: List = byteListOf( null, null, null, null ).plus("ftyphevx".encodeToByteArray().toList()) - /* 4 bytes + "ftypavif" */ + /** 4 bytes + "ftypavif" */ public val avif: List = byteListOf( null, null, null, null ).plus("ftypavif".encodeToByteArray().toList()) - /* 4 bytes + "ftypcrx" */ + /** 4 bytes + "ftypavis" */ + public val avis: List = byteListOf( + null, null, null, null + ).plus("ftypavis".encodeToByteArray().toList()) + + /** 4 bytes + "ftypcrx" */ public val cr3: List = byteListOf( null, null, null, null ).plus("ftypcrx".encodeToByteArray().toList()) - /* The regular ISOBMFF-based JPEG XL */ + /** The regular ISOBMFF-based JPEG XL */ public val jxl: List = byteListOf( 0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A ) - /* The 'naked' code stream without metadata. */ + /** The 'naked' code stream without metadata. */ public val jxlCodeStream: List = byteListOf( 0xFF, 0x0A ) + /** The current MP4 standard */ + public val mp42: List = byteListOf( + null, null, null, null + ).plus("ftypmp42".encodeToByteArray().toList()) + + /** The older MP4 standard */ + public val mp41: List = byteListOf( + null, null, null, null + ).plus("ftypmp42".encodeToByteArray().toList()) + + /** The generic MP4 format (without closer specification) */ + public val isom: List = byteListOf( + null, null, null, null + ).plus("ftypisom".encodeToByteArray().toList()) + + /** MP4, similar to ISOM */ + public val iso2: List = byteListOf( + null, null, null, null + ).plus("ftypisom".encodeToByteArray().toList()) + + /** MP4, often used for H.264 encoded files */ + public val avc1: List = byteListOf( + null, null, null, null + ).plus("ftypavc1".encodeToByteArray().toList()) + + /** QuickTime video, the usual ftyp for MOV files. */ + public val qt: List = byteListOf( + null, null, null, null + ).plus("ftypqt ".encodeToByteArray().toList()) + + /** The 'naked' code stream without metadata. */ + public val pdf: List = byteListOf( + 0x25, 0x50, 0x44, 0x46, 0x2D + ) + private fun byteListOf(vararg ints: Int?): List = ints.map { it?.toByte() } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageMetadata.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaMetadata.kt similarity index 60% rename from src/commonMain/kotlin/com/ashampoo/kim/format/ImageMetadata.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaMetadata.kt index 97e93fc6..a7f309da 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageMetadata.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaMetadata.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,23 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format - -import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffDirectory -import com.ashampoo.kim.format.tiff.TiffField -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.model.ImageFormat -import com.ashampoo.kim.model.ImageSize - -public data class ImageMetadata( - val imageFormat: ImageFormat?, - val imageSize: ImageSize?, - val exif: TiffContents?, - val exifBytes: ByteArray?, - val iptc: IptcMetadata?, - val xmp: String? +package de.stefan_oltmann.kim.format + +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffDirectory +import de.stefan_oltmann.kim.format.tiff.TiffField +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.model.MediaFormat +import de.stefan_oltmann.kim.model.ImageSize + +public class MediaMetadata internal constructor( + public val mediaFormat: MediaFormat?, + public val imageSize: ImageSize?, + public val exif: TiffContents?, + public val exifBytes: ByteArray?, + public val iptc: IptcMetadata?, + public val xmp: String? ) { public fun findStringValue(tagInfo: TagInfo): String? { @@ -61,7 +62,7 @@ public data class ImageMetadata( override fun toString(): String { val sb = StringBuilder() - sb.appendLine("File format : $imageFormat") + sb.appendLine("File format : $mediaFormat") sb.appendLine("Resolution : $imageSize") if (exif != null) @@ -78,4 +79,20 @@ public data class ImageMetadata( return sb.toString() } + + internal fun withMediaFormat(mediaFormat: MediaFormat) = + MediaMetadata( + mediaFormat = mediaFormat, + imageSize = imageSize, + exif = exif, + exifBytes = exifBytes, + iptc = iptc, + xmp = xmp + ) + + internal companion object { + + fun createEmpty(mediaFormat: MediaFormat?) = + MediaMetadata(mediaFormat, null, null, null, null, null) + } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataExtractor.kt similarity index 84% rename from src/commonMain/kotlin/com/ashampoo/kim/format/MetadataExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataExtractor.kt index 1ef51207..f21ae66b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataExtractor.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format +package de.stefan_oltmann.kim.format -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.input.ByteReader +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.input.ByteReader public fun interface MetadataExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataUpdater.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/MetadataUpdater.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataUpdater.kt index 874c8d77..d405ba06 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataUpdater.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataUpdater.kt @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format +package de.stefan_oltmann.kim.format -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteWriter +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteWriter public interface MetadataUpdater { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/TiffPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/TiffPreviewExtractor.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/TiffPreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/TiffPreviewExtractor.kt index 4f99d137..aea05ac0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/TiffPreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/TiffPreviewExtractor.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format +package de.stefan_oltmann.kim.format -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.input.RandomAccessByteReader +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.input.RandomAccessByteReader public fun interface TiffPreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/arw/ArwPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/arw/ArwPreviewExtractor.kt similarity index 78% rename from src/commonMain/kotlin/com/ashampoo/kim/format/arw/ArwPreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/arw/ArwPreviewExtractor.kt index abbbe39c..01eeeaca 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/arw/ArwPreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/arw/ArwPreviewExtractor.kt @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.arw - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.TiffPreviewExtractor -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.RandomAccessByteReader +package de.stefan_oltmann.kim.format.arw + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.TiffPreviewExtractor +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.RandomAccessByteReader public object ArwPreviewExtractor : TiffPreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BMFFConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BMFFConstants.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BMFFConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BMFFConstants.kt index 2b22e05b..819a7d8f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BMFFConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BMFFConstants.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Ramon Bouckaert * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff +package de.stefan_oltmann.kim.format.bmff -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder internal object BMFFConstants { @@ -35,4 +36,7 @@ internal object BMFFConstants { const val ITEM_TYPE_EXIF = 1_165_519_206 const val ITEM_TYPE_MIME = 1_835_625_829 const val ITEM_TYPE_JPEG = 1_785_750_887 + + /** Standard UUID for XMP metadata embedded in a uuid box */ + const val XMP_UUID = "be7acfcb97a942e89c71999491e3afac" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BaseMediaFileFormatImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BaseMediaFileFormatImageParser.kt similarity index 75% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BaseMediaFileFormatImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BaseMediaFileFormatImageParser.kt index e991bc42..476ef036 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BaseMediaFileFormatImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BaseMediaFileFormatImageParser.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Ramon Bouckaert * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,27 +14,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.MetadataOffset -import com.ashampoo.kim.common.MetadataType -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.BMFFConstants.TIFF_HEADER_OFFSET_BYTE_COUNT -import com.ashampoo.kim.format.bmff.box.FileTypeBox -import com.ashampoo.kim.format.bmff.box.MetaBox -import com.ashampoo.kim.format.cr3.Cr3Reader -import com.ashampoo.kim.format.jxl.JxlReader -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.readRemainingBytes -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.bmff + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.MetadataOffset +import de.stefan_oltmann.kim.common.MetadataType +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.TIFF_HEADER_OFFSET_BYTE_COUNT +import de.stefan_oltmann.kim.format.bmff.box.BoxContainer +import de.stefan_oltmann.kim.format.bmff.box.FileTypeBox +import de.stefan_oltmann.kim.format.bmff.box.MetaBoxTopLevel +import de.stefan_oltmann.kim.format.bmff.box.UuidBox +import de.stefan_oltmann.kim.format.cr3.Cr3Reader +import de.stefan_oltmann.kim.format.jxl.JxlReader +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.readRemainingBytes +import de.stefan_oltmann.kim.input.skipBytes /** * Reads containers that follow the ISO base media file format @@ -44,7 +47,7 @@ import com.ashampoo.kim.input.skipBytes */ public object BaseMediaFileFormatImageParser : ImageParser { - override fun parseMetadata(byteReader: ByteReader): ImageMetadata { + override fun parseMetadata(byteReader: ByteReader): MediaMetadata { val copyByteReader = CopyByteReader(byteReader) @@ -78,21 +81,16 @@ public object BaseMediaFileFormatImageParser : ImageParser { if (fileTypeBox.majorBrand == FileTypeBox.CR3_BRAND) return Cr3Reader.createMetadata(allBoxes) - val metaBox = allBoxes.filterIsInstance().firstOrNull() - ?: throw ImageReadException("Illegal ISOBMFF: Has no 'meta' Box.") + val metaBox = allBoxes.filterIsInstance().firstOrNull() + ?: throw ImageReadException("Illegal ISOBMFF: Has no top-level 'meta' Box.") + + val uuidBoxes = BoxContainer.findAllBoxesRecursive(allBoxes).filterIsInstance() val metadataOffsets = metaBox.findMetadataOffsets() /* Return empty object if no metadata is found. */ - if (metadataOffsets.isEmpty()) - return ImageMetadata( - imageFormat = null, - imageSize = null, - exif = null, - exifBytes = null, - iptc = null, - xmp = null - ) + if (metadataOffsets.isEmpty() && uuidBoxes.none { it.isXmp() }) + return MediaMetadata.createEmpty(mediaFormat = null) val minOffset = metadataOffsets.first().offset @@ -163,8 +161,13 @@ public object BaseMediaFileFormatImageParser : ImageParser { } } - return ImageMetadata( - imageFormat = null, // could be any ISO BMFF + /* XMP data can also be found in a UUID box, if we didn't find it in the META box. */ + if (xmp == null) { + xmp = uuidBoxes.firstOrNull { it.isXmp() }?.data?.decodeToString() + } + + return MediaMetadata( + mediaFormat = null, // could be any ISO BMFF imageSize = null, // not covered by ISO BMFF exif = exif, exifBytes = exifBytes, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReader.kt similarity index 58% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReader.kt index b15cf3b7..bd94b0ad 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReader.kt @@ -1,4 +1,6 @@ /* + * Copyright 2026 Ramon Bouckaert + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,30 +16,33 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff - -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.box.Box -import com.ashampoo.kim.format.bmff.box.FileTypeBox -import com.ashampoo.kim.format.bmff.box.HandlerReferenceBox -import com.ashampoo.kim.format.bmff.box.ItemInfoEntryBox -import com.ashampoo.kim.format.bmff.box.ItemInformationBox -import com.ashampoo.kim.format.bmff.box.ItemLocationBox -import com.ashampoo.kim.format.bmff.box.MediaBox -import com.ashampoo.kim.format.bmff.box.MediaDataBox -import com.ashampoo.kim.format.bmff.box.MetaBox -import com.ashampoo.kim.format.bmff.box.MovieBox -import com.ashampoo.kim.format.bmff.box.PrimaryItemBox -import com.ashampoo.kim.format.bmff.box.TrackBox -import com.ashampoo.kim.format.bmff.box.UuidBox -import com.ashampoo.kim.format.jxl.box.CompressedBox -import com.ashampoo.kim.format.jxl.box.ExifBox -import com.ashampoo.kim.format.jxl.box.JxlParticalCodestreamBox -import com.ashampoo.kim.format.jxl.box.XmlBox -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.read8BytesAsLong -import com.ashampoo.kim.input.readBytes +package de.stefan_oltmann.kim.format.bmff + +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.bmff.box.FileTypeBox +import de.stefan_oltmann.kim.format.bmff.box.HandlerReferenceBox +import de.stefan_oltmann.kim.format.bmff.box.ItemInfoEntryBox +import de.stefan_oltmann.kim.format.bmff.box.ItemInformationBox +import de.stefan_oltmann.kim.format.bmff.box.ItemLocationBox +import de.stefan_oltmann.kim.format.bmff.box.MediaBox +import de.stefan_oltmann.kim.format.bmff.box.MediaDataBox +import de.stefan_oltmann.kim.format.bmff.box.MetaBox +import de.stefan_oltmann.kim.format.bmff.box.MetaBoxTopLevel +import de.stefan_oltmann.kim.format.bmff.box.MovieBox +import de.stefan_oltmann.kim.format.bmff.box.PrimaryItemBox +import de.stefan_oltmann.kim.format.bmff.box.TrackBox +import de.stefan_oltmann.kim.format.bmff.box.TrackHeaderBox +import de.stefan_oltmann.kim.format.bmff.box.UserDataBox +import de.stefan_oltmann.kim.format.bmff.box.UuidBox +import de.stefan_oltmann.kim.format.jxl.box.CompressedBox +import de.stefan_oltmann.kim.format.jxl.box.ExifBox +import de.stefan_oltmann.kim.format.jxl.box.JxlParticalCodestreamBox +import de.stefan_oltmann.kim.format.jxl.box.XmlBox +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.read8BytesAsLong +import de.stefan_oltmann.kim.input.readBytes /** * Reads ISOBMFF boxes @@ -47,19 +52,27 @@ public object BoxReader { /** * @param byteReader The reader as source for the bytes * @param stopAfterMetadataRead If reading the file for metadata on the highest level we - * want to stop reading after the meta boxes to prevent reading the whole image data block in. - * For iPhone HEIC this is possible, but Samsung HEIC has "meta" coming after "mdat" + * want to stop reading after the top-level meta boxes to prevent reading the whole image data + * block in. For iPhone HEIC this is possible, but Samsung HEIC has "meta" coming after "mdat" + * @param parentBoxType can be used to specify the type of the parent box - used when traversing + * through sub boxes. This can change the logic for parsing boxes as "meta" boxes within a sub + * box need to be treated differently to "meta" boxes at the top level. */ public fun readBoxes( byteReader: ByteReader, stopAfterMetadataRead: Boolean = false, positionOffset: Long = 0, offsetShift: Long = 0, - updatePosition: ((Long) -> Unit)? = null + updatePosition: ((Long) -> Unit)? = null, + parentBoxType: BoxType? = null ): List { var haveSeenJxlHeaderBox = false + var haveSeenTopLevelMetaBox = false + + var haveSeenXmpDataInUuid = false + val boxes = mutableListOf() var position: Long = positionOffset @@ -128,7 +141,11 @@ public object BoxReader { val box = when (type) { /* Generic EIC/ISO 14496-12 boxes. */ BoxType.FTYP -> FileTypeBox(globalOffset, size, largeSize, bytes) - BoxType.META -> MetaBox(globalOffset, size, largeSize, bytes) + BoxType.META -> if (parentBoxType == null) { + MetaBoxTopLevel(globalOffset, size, largeSize, bytes) + } else { + MetaBox(globalOffset, size, largeSize, bytes) + } BoxType.HDLR -> HandlerReferenceBox(globalOffset, size, largeSize, bytes) BoxType.IINF -> ItemInformationBox(globalOffset, size, largeSize, bytes) BoxType.INFE -> ItemInfoEntryBox(globalOffset, size, largeSize, bytes) @@ -137,8 +154,10 @@ public object BoxReader { BoxType.MDAT -> MediaDataBox(globalOffset, size, largeSize, bytes) BoxType.MOOV -> MovieBox(globalOffset, size, largeSize, bytes) BoxType.TRAK -> TrackBox(globalOffset, size, largeSize, bytes) + BoxType.TKHD -> TrackHeaderBox(globalOffset, size, largeSize, bytes) BoxType.MDIA -> MediaBox(globalOffset, size, largeSize, bytes) BoxType.UUID -> UuidBox(globalOffset, size, largeSize, bytes) + BoxType.UDTA -> UserDataBox(globalOffset, size, largeSize, bytes) /* JXL boxes */ BoxType.EXIF -> ExifBox(globalOffset, size, largeSize, bytes) BoxType.XML -> XmlBox(globalOffset, size, largeSize, bytes) @@ -152,9 +171,35 @@ public object BoxReader { if (stopAfterMetadataRead) { - /* This is the case for HEIC & AVIF */ - if (type == BoxType.META) - break + /* Metadata is here for most HEIC & AVIF */ + if (type == BoxType.META && parentBoxType == null) { + haveSeenTopLevelMetaBox = true + + box as MetaBoxTopLevel + + /* + * If this box has XMP, we can break. If it's missing XMP, we should continue + * reading the file to search for an XMP UUID box (or break now if we've already + * seen it) + */ + if (box.hasXmp() || haveSeenXmpDataInUuid) { + break + } + } + + /* Some store XMP data in a UUID box instead */ + if (type == BoxType.UUID) { + box as UuidBox + + /* + * If this box contains XMP, we can break as soon as we also find the top-level + * META box (or break now if we've already seen it) + */ + if (box.isXmp()) { + haveSeenXmpDataInUuid = true + if (haveSeenTopLevelMetaBox) break + } + } /* * When parsing JXL we need to take a note that we saw the header. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxType.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxType.kt index 9168d59f..c9667272 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxType.kt @@ -1,4 +1,6 @@ /* + * Copyright 2026 Ramon Bouckaert + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,9 +15,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff +package de.stefan_oltmann.kim.format.bmff -import com.ashampoo.kim.common.toFourCCTypeString +import de.stefan_oltmann.kim.common.toFourCCTypeString public data class BoxType( val bytes: ByteArray, @@ -99,15 +101,30 @@ public data class BoxType( public val MOOV: BoxType = of("moov".encodeToByteArray()) /** - * ISOBMFF Track Box, used by CR3 + * ISOBMFF Track Box, used by CR3 and AVIS */ public val TRAK: BoxType = of("trak".encodeToByteArray()) /** - * ISOBMFF Media Box, used by CR3 + * ISOBMFF Track Header Box, used by CR3 and AVIS + */ + public val TKHD: BoxType = of("tkhd".encodeToByteArray()) + + /** + * ISOBMFF Media Box, used by CR3 amd AVIS */ public val MDIA: BoxType = of("mdia".encodeToByteArray()) + /** + * ISOBMFF Media Header Box + */ + public val MDHD: BoxType = of("mdhd".encodeToByteArray()) + + /** + * ISOBMFF User Data Box + */ + public val UDTA: BoxType = of("udta".encodeToByteArray()) + /** * ISOBMFF Media Information Container, used by CR3 */ @@ -178,6 +195,26 @@ public data class BoxType( */ public val THMB: BoxType = of("THMB".encodeToByteArray()) + /** + * Apple information box (format) - byte 0xa9 followed by "fmt" + */ + public val FMT: BoxType = of(byteArrayOf(0xA9.toByte(), 'f'.code.toByte(), 'm'.code.toByte(), 't'.code.toByte())) + + /** + * Apple information box (information) - byte 0xa9 followed by "inf" + */ + public val AINF: BoxType = of(byteArrayOf(0xA9.toByte(), 'i'.code.toByte(), 'n'.code.toByte(), 'f'.code.toByte())) + + /** + * FujiFilm Movie Stream Name + */ + public val FFMV: BoxType = of("FFMV".encodeToByteArray()) + + /** + * FujiFilm Metadata + */ + public val MVTG: BoxType = of("MVTG".encodeToByteArray()) + @Suppress("MagicNumber") public fun of(typeBytes: ByteArray): BoxType { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/CopyByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/CopyByteReader.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/CopyByteReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/CopyByteReader.kt index 48b471ba..9e4274bc 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/CopyByteReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/CopyByteReader.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff +package de.stefan_oltmann.kim.format.bmff -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter internal class CopyByteReader( val byteReader: ByteReader diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/Extent.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/Extent.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/Extent.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/Extent.kt index 082f60a9..2c1a79ce 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/Extent.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/Extent.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff +package de.stefan_oltmann.kim.format.bmff public data class Extent( val itemId: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/Box.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/Box.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/Box.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/Box.kt index 3324163e..981f587f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/Box.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/Box.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH -import com.ashampoo.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH +import de.stefan_oltmann.kim.format.bmff.BoxType public open class Box( public val type: BoxType, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/BoxContainer.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/BoxContainer.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/BoxContainer.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/BoxContainer.kt index 8c895682..6fedfbd7 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/BoxContainer.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/BoxContainer.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box public interface BoxContainer { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/FileTypeBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/FileTypeBox.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/FileTypeBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/FileTypeBox.kt index 3dc2bba4..77db51cf 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/FileTypeBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/FileTypeBox.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,14 +15,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.common.toFourCCTypeString -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.common.toFourCCTypeString +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt /** * EIC/ISO 14496-12 ftyp box @@ -72,5 +73,7 @@ public class FileTypeBox( internal companion object { const val JXL_BRAND = "jxl " const val CR3_BRAND = "crx " + const val MP4V2_BRAND = "mp42" + const val MOV_BRAND = "qt " } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/HandlerReferenceBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/HandlerReferenceBox.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/HandlerReferenceBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/HandlerReferenceBox.kt index e623aa06..4801d30c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/HandlerReferenceBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/HandlerReferenceBox.kt @@ -14,15 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.readNullTerminatedString -import com.ashampoo.kim.input.skipBytes +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.readNullTerminatedString +import de.stefan_oltmann.kim.input.skipBytes /** * EIC/ISO 14496-12 hdlr box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInfoEntryBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInfoEntryBox.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInfoEntryBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInfoEntryBox.kt index 7f20d2e4..d027b5a6 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInfoEntryBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInfoEntryBox.kt @@ -14,18 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box - -import com.ashampoo.kim.common.toFourCCTypeString -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.readNullTerminatedString +package de.stefan_oltmann.kim.format.bmff.box + +import de.stefan_oltmann.kim.common.toFourCCTypeString +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.readNullTerminatedString /** * EIC/ISO 14496-12 infe box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInformationBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInformationBox.kt similarity index 74% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInformationBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInformationBox.kt index fb07745f..cabe2aaa 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInformationBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInformationBox.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Ramon Bouckaert * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,17 +15,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box - -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes +package de.stefan_oltmann.kim.format.bmff.box + +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes /** * EIC/ISO 14496-12 iinf box @@ -63,7 +64,8 @@ public class ItemInformationBox( byteReader = byteReader, stopAfterMetadataRead = false, positionOffset = 4L + if (version == 0) 2 else 4, - offsetShift = offset + 4 + if (version == 0) 2 else 4 + offsetShift = offset + 4 + if (version == 0) 2 else 4, + parentBoxType = type ) val map = mutableMapOf() @@ -79,5 +81,5 @@ public class ItemInformationBox( } override fun toString(): String = - "$type version=$version flags=${flags.toHex()} ($entryCount entries)" + "$type Box version=$version flags=${flags.toHex()} ($entryCount entries)" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemLocationBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemLocationBox.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemLocationBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemLocationBox.kt index 585fa33a..4feaabed 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemLocationBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemLocationBox.kt @@ -14,19 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box - -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.Extent -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.read8BytesAsLong -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.readXBytesAtInt -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.bmff.box + +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.Extent +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.read8BytesAsLong +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.readXBytesAtInt +import de.stefan_oltmann.kim.input.skipBytes /** * EIC/ISO 14496-12 iloc box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaBox.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaBox.kt index d7674f3e..817c832a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaBox.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Ramon Bouckaert * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,11 +15,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader /** * EIC/ISO 14496-12 movie box @@ -42,10 +43,11 @@ public class MediaBox( byteReader = byteReader, stopAfterMetadataRead = false, positionOffset = 4, - offsetShift = offset + 8 + offsetShift = offset + 8, + parentBoxType = type ) } override fun toString(): String = - "Box '$type' @$offset boxes=${boxes.map { it.type }}" + "$type Box @$offset boxes=${boxes.map { it.type }}" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaDataBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaDataBox.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaDataBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaDataBox.kt index 0ad1d414..ecdcc18a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaDataBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaDataBox.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.BoxType /** * EIC/ISO 14496-12 mdat box diff --git a/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBox.kt new file mode 100644 index 00000000..ca5fee78 --- /dev/null +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBox.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2026 Ramon Bouckaert + * Copyright 2025 Ashampoo GmbH & Co. KG + * Copyright 2002-2023 Drew Noakes and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.stefan_oltmann.kim.format.bmff.box + +import de.stefan_oltmann.kim.common.MetadataOffset +import de.stefan_oltmann.kim.common.MetadataType +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BMFFConstants +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes + +/** + * EIC/ISO 14496-12 meta box + * + * The Meta Box is a container for several metadata boxes. + */ +public open class MetaBox( + offset: Long, + size: Long, + largeSize: Long?, + payload: ByteArray +) : Box(BoxType.META, offset, size, largeSize, payload), BoxContainer { + + public val version: Int + + public val flags: ByteArray + + /* Mandatory boxes in META */ + public val handlerReferenceBox: HandlerReferenceBox + + final override val boxes: List + + init { + + val byteReader = ByteArrayByteReader(payload) + + version = byteReader.readByteAsInt() + + flags = byteReader.readBytes("flags", 3) + + boxes = BoxReader.readBoxes( + byteReader = byteReader, + stopAfterMetadataRead = false, + positionOffset = 4, + offsetShift = offset + 8 + ) + + /* Find & set mandatory box */ + handlerReferenceBox = boxes.find { it.type == BoxType.HDLR } as HandlerReferenceBox + } + + override fun toString(): String = + "$type Box version=$version flags=${flags.toHex()} boxes=${boxes.map { it.type }}" +} diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MetaBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBoxTopLevel.kt similarity index 51% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MetaBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBoxTopLevel.kt index 7d7a5425..0b798fca 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MetaBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBoxTopLevel.kt @@ -1,6 +1,5 @@ /* - * Copyright 2025 Ashampoo GmbH & Co. KG - * Copyright 2002-2023 Drew Noakes and contributors + * Copyright 2026 Ramon Bouckaert * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,63 +13,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.common.MetadataOffset -import com.ashampoo.kim.common.MetadataType -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.bmff.BMFFConstants -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes +import de.stefan_oltmann.kim.common.MetadataOffset +import de.stefan_oltmann.kim.common.MetadataType +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BMFFConstants +import de.stefan_oltmann.kim.format.bmff.BoxType /** * EIC/ISO 14496-12 meta box * - * The Meta Box is a container for several metadata boxes. + * The Meta Box is a container for several metadata boxes. This class represents a top-level Meta + * Box that is not a sub-box of some other box. */ -public class MetaBox( +public class MetaBoxTopLevel( offset: Long, size: Long, largeSize: Long?, payload: ByteArray -) : Box(BoxType.META, offset, size, largeSize, payload), BoxContainer { +) : MetaBox(offset, size, largeSize, payload), BoxContainer { - public val version: Int - - public val flags: ByteArray - - /* Mandatory boxes in META */ - public val handlerReferenceBox: HandlerReferenceBox - public val primaryItemBox: PrimaryItemBox - public val itemInfoBox: ItemInformationBox - public val itemLocationBox: ItemLocationBox - - override val boxes: List - - init { - - val byteReader = ByteArrayByteReader(payload) - - version = byteReader.readByteAsInt() - - flags = byteReader.readBytes("flags", 3) - - boxes = BoxReader.readBoxes( - byteReader = byteReader, - stopAfterMetadataRead = false, - positionOffset = 4, - offsetShift = offset + 8 - ) - - /* Find & set mandatory boxes. */ - handlerReferenceBox = boxes.find { it.type == BoxType.HDLR } as HandlerReferenceBox - primaryItemBox = boxes.find { it.type == BoxType.PITM } as PrimaryItemBox - itemInfoBox = boxes.find { it.type == BoxType.IINF } as ItemInformationBox - itemLocationBox = boxes.find { it.type == BoxType.ILOC } as ItemLocationBox - } + /* Mandatory boxes in top-level META */ + public val primaryItemBox: PrimaryItemBox = boxes.find { it.type == BoxType.PITM } as PrimaryItemBox + public val itemInfoBox: ItemInformationBox = boxes.find { it.type == BoxType.IINF } as ItemInformationBox + public val itemLocationBox: ItemLocationBox = boxes.find { it.type == BoxType.ILOC } as ItemLocationBox public fun findMetadataOffsets(): List { @@ -108,6 +75,14 @@ public class MetaBox( return offsets } + public fun hasXmp(): Boolean { + for (extent in itemLocationBox.extents) { + val itemInfo = itemInfoBox.map.get(extent.itemId) ?: continue + if (itemInfo.itemType == BMFFConstants.ITEM_TYPE_MIME) return true + } + return false + } + override fun toString(): String = "$type Box version=$version flags=${flags.toHex()} boxes=${boxes.map { it.type }}" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MovieBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MovieBox.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MovieBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MovieBox.kt index 38d4d5eb..9c8e6f32 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MovieBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MovieBox.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Ramon Bouckaert * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,11 +15,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader /** * EIC/ISO 14496-12 movie box @@ -42,10 +43,11 @@ public class MovieBox( byteReader = byteReader, stopAfterMetadataRead = false, positionOffset = 4, - offsetShift = offset + 8 + offsetShift = offset + 8, + parentBoxType = type ) } override fun toString(): String = - "Box '$type' @$offset boxes=${boxes.map { it.type }}" + "$type Box @$offset boxes=${boxes.map { it.type }}" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/PrimaryItemBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/PrimaryItemBox.kt similarity index 76% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/PrimaryItemBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/PrimaryItemBox.kt index 96294599..9859b1c5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/PrimaryItemBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/PrimaryItemBox.kt @@ -14,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box - -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes +package de.stefan_oltmann.kim.format.bmff.box + +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes /** * EIC/ISO 14496-12 pitm box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/TrackBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackBox.kt similarity index 57% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/TrackBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackBox.kt index aa70386a..7ebf8364 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/TrackBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackBox.kt @@ -1,4 +1,6 @@ /* + * Copyright 2026 Ramon Bouckaert + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,12 +16,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader /** * EIC/ISO 14496-12 movie box @@ -35,7 +37,7 @@ public class TrackBox( override val boxes: List - public val trackHeaderBox: Box + public val trackHeaderBox: TrackHeaderBox public val mediaBox: MediaBox init { @@ -46,16 +48,19 @@ public class TrackBox( byteReader = byteReader, stopAfterMetadataRead = false, positionOffset = 4, - offsetShift = offset + 8 + offsetShift = offset + 8, + parentBoxType = type ) - if (boxes.size != 2) - throw ImageReadException("Track box should contain two boxes: $boxes") + if (boxes.size < 2) + throw ImageReadException("Track box should contain at least two boxes: $boxes") - trackHeaderBox = boxes[0] - mediaBox = boxes[1] as MediaBox + trackHeaderBox = boxes.filterIsInstance().firstOrNull() + ?: throw ImageReadException("Track box should contain a track header box: $boxes") + mediaBox = boxes.filterIsInstance().firstOrNull() + ?: throw ImageReadException("Track box should contain a media box: $boxes") } override fun toString(): String = - "Box '$type' @$offset boxes=${boxes.map { it.type }}" + "$type Box @$offset boxes=${boxes.map { it.type }}" } diff --git a/src/appleTest/kotlin/com/ashampoo/kim/ResourcePath.apple.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackHeaderBox.kt similarity index 53% rename from src/appleTest/kotlin/com/ashampoo/kim/ResourcePath.apple.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackHeaderBox.kt index 8d31b7b5..9e3ab9a9 100644 --- a/src/appleTest/kotlin/com/ashampoo/kim/ResourcePath.apple.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackHeaderBox.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025 Ashampoo GmbH & Co. KG + * Copyright 2026 Ramon Bouckaert * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,16 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim +package de.stefan_oltmann.kim.format.bmff.box -import platform.Foundation.NSBundle +import de.stefan_oltmann.kim.format.bmff.BoxType -actual fun getPathForResource(path: String): String { - - val pathForResource = NSBundle.mainBundle.pathForResource( - path.substringBeforeLast("."), - path.substringAfterLast(".") - ).toString() +/** + * EIC/ISO 14496-12 movie box + * + * The Track Header Box appears within a Track Box and contains track metadata + */ +public class TrackHeaderBox( + offset: Long, + size: Long, + largeSize: Long?, + payload: ByteArray +) : Box(BoxType.TKHD, offset, size, largeSize, payload) { - return pathForResource + override fun toString(): String = + "$type Box @$offset ($actualLength bytes)" } diff --git a/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UserDataBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UserDataBox.kt new file mode 100644 index 00000000..fc3cb8ab --- /dev/null +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UserDataBox.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2026 Stefan Oltmann + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.stefan_oltmann.kim.format.bmff.box + +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader + +/** + * User Data box + * + * This box contains multiple UUID boxes. + */ +public class UserDataBox( + offset: Long, + size: Long, + largeSize: Long?, + payload: ByteArray +) : Box(BoxType.UDTA, offset, size, largeSize, payload), BoxContainer { + + override val boxes: List + + init { + + val byteReader = ByteArrayByteReader(payload) + + boxes = BoxReader.readBoxes( + byteReader = byteReader, + stopAfterMetadataRead = false, + positionOffset = 0, + offsetShift = offset + 8 + ) + } +} diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/UuidBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UuidBox.kt similarity index 76% rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/UuidBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UuidBox.kt index 24a4cd3d..e36e7e19 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/UuidBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UuidBox.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Ramon Bouckaert * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2002-2023 Drew Noakes and contributors * @@ -14,12 +15,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.bmff.box +package de.stefan_oltmann.kim.format.bmff.box -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.readRemainingBytes +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.bmff.BMFFConstants +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.readRemainingBytes /** * EIC/ISO 14496-12 UUID box @@ -49,6 +51,8 @@ public class UuidBox( data = byteReader.readRemainingBytes() } + public fun isXmp(): Boolean = uuidAsHex == BMFFConstants.XMP_UUID + override fun toString(): String = "Box '$type' @$offset uuid=$uuidAsHex (${actualLength} bytes)" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/cr2/Cr2PreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr2/Cr2PreviewExtractor.kt similarity index 78% rename from src/commonMain/kotlin/com/ashampoo/kim/format/cr2/Cr2PreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr2/Cr2PreviewExtractor.kt index a06c8ba1..c46bafce 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/cr2/Cr2PreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr2/Cr2PreviewExtractor.kt @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.cr2 - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.TiffPreviewExtractor -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.input.RandomAccessByteReader +package de.stefan_oltmann.kim.format.cr2 + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.TiffPreviewExtractor +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.input.RandomAccessByteReader public object Cr2PreviewExtractor : TiffPreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3PreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3PreviewExtractor.kt similarity index 84% rename from src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3PreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3PreviewExtractor.kt index 5dc749c5..a3776ac9 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3PreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3PreviewExtractor.kt @@ -13,24 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.cr3 - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.slice -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.MediaDataBox -import com.ashampoo.kim.format.bmff.box.MovieBox -import com.ashampoo.kim.format.bmff.box.TrackBox -import com.ashampoo.kim.format.bmff.box.UuidBox -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.read8BytesAsLong -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.cr3 + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.slice +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.MediaDataBox +import de.stefan_oltmann.kim.format.bmff.box.MovieBox +import de.stefan_oltmann.kim.format.bmff.box.TrackBox +import de.stefan_oltmann.kim.format.bmff.box.UuidBox +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.read8BytesAsLong +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipBytes import kotlin.jvm.JvmStatic public object Cr3PreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3Reader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3Reader.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3Reader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3Reader.kt index b6256272..32cc6055 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3Reader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3Reader.kt @@ -13,23 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.cr3 - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.Box -import com.ashampoo.kim.format.bmff.box.MovieBox -import com.ashampoo.kim.format.bmff.box.UuidBox -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffDirectory -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.model.ImageFormat -import com.ashampoo.kim.model.ImageSize +package de.stefan_oltmann.kim.format.cr3 + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.bmff.box.MovieBox +import de.stefan_oltmann.kim.format.bmff.box.UuidBox +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffDirectory +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.model.MediaFormat +import de.stefan_oltmann.kim.model.ImageSize /** * Parses CR3 as documented on https://github.com/lclevy/canon_cr3 @@ -40,7 +40,7 @@ internal object Cr3Reader { const val CR3_XMP_UUID = "be7acfcb97a942e89c71999491e3afac" const val CR3_PREVIEW_UUID = "eaf42b5e1c984b88b9fbb7dc406e4d16" - fun createMetadata(allBoxes: List): ImageMetadata { + fun createMetadata(allBoxes: List): MediaMetadata { val subBoxes = findMetadaSubBoxes(allBoxes) @@ -52,8 +52,8 @@ internal object Cr3Reader { if (idf0 == null) { - return ImageMetadata( - imageFormat = ImageFormat.CR3, + return MediaMetadata( + mediaFormat = MediaFormat.CR3, imageSize = null, exif = null, exifBytes = null, @@ -104,8 +104,8 @@ internal object Cr3Reader { else null - return ImageMetadata( - imageFormat = ImageFormat.CR3, + return MediaMetadata( + mediaFormat = MediaFormat.CR3, imageSize = imageSize, exif = tiffContents, exifBytes = null, // TODO Generate bytes? diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/dng/DngPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/dng/DngPreviewExtractor.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/dng/DngPreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/dng/DngPreviewExtractor.kt index 8e4822aa..56a5535c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/dng/DngPreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/dng/DngPreviewExtractor.kt @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.dng - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.TiffPreviewExtractor -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.RandomAccessByteReader +package de.stefan_oltmann.kim.format.dng + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.TiffPreviewExtractor +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.RandomAccessByteReader public object DngPreviewExtractor : TiffPreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifChunkType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifChunkType.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifChunkType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifChunkType.kt index 0b83f153..71025199 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifChunkType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifChunkType.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif public enum class GifChunkType { HEADER, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifConstants.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifConstants.kt index 4e312d47..45a5eab0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifConstants.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder public object GifConstants { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParser.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParser.kt index 68063807..f62f823a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParser.kt @@ -14,26 +14,26 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.gif.chunk.GifChunk -import com.ashampoo.kim.format.gif.chunk.GifChunkApplicationExtension -import com.ashampoo.kim.format.gif.chunk.GifChunkCommentExtension -import com.ashampoo.kim.format.gif.chunk.GifChunkHeader -import com.ashampoo.kim.format.gif.chunk.GifChunkImageData -import com.ashampoo.kim.format.gif.chunk.GifChunkImageDescriptor -import com.ashampoo.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor -import com.ashampoo.kim.format.gif.chunk.GifChunkPlainTextExtension -import com.ashampoo.kim.format.gif.chunk.GifChunkTerminator -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.model.ImageFormat +package de.stefan_oltmann.kim.format.gif + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.gif.chunk.GifChunk +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkApplicationExtension +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkCommentExtension +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkHeader +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkImageData +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkImageDescriptor +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkPlainTextExtension +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkTerminator +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.model.MediaFormat import kotlin.jvm.JvmStatic public object GifImageParser : ImageParser { @@ -45,7 +45,7 @@ public object GifImageParser : ImageParser { ) @Throws(ImageReadException::class) - override fun parseMetadata(byteReader: ByteReader): ImageMetadata = + override fun parseMetadata(byteReader: ByteReader): MediaMetadata = tryWithImageReadException { val chunks = readChunks(byteReader, metadataChunkTypes) @@ -58,7 +58,7 @@ public object GifImageParser : ImageParser { @Throws(ImageReadException::class) @JvmStatic - public fun parseMetadataFromChunks(chunks: List): ImageMetadata = tryWithImageReadException { + public fun parseMetadataFromChunks(chunks: List): MediaMetadata = tryWithImageReadException { require(chunks.isNotEmpty()) { "Given chunk list was empty." @@ -88,8 +88,8 @@ public object GifImageParser : ImageParser { else null - return@tryWithImageReadException ImageMetadata( - imageFormat = ImageFormat.GIF, + return@tryWithImageReadException MediaMetadata( + mediaFormat = MediaFormat.GIF, imageSize = imageSize, exif = null, exifBytes = null, // GIF does not support EXIF data diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractor.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractor.kt index e0c7c611..4aa35e8e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractor.kt @@ -14,19 +14,19 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.MetadataExtractor -import com.ashampoo.kim.format.gif.GifImageParser.parseGifSubChunksUntilEmpty -import com.ashampoo.kim.format.gif.chunk.GifChunkImageDescriptor -import com.ashampoo.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.model.ImageSize +package de.stefan_oltmann.kim.format.gif + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MetadataExtractor +import de.stefan_oltmann.kim.format.gif.GifImageParser.parseGifSubChunksUntilEmpty +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkImageDescriptor +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.model.ImageSize public object GifMetadataExtractor : MetadataExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdater.kt similarity index 75% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifUpdater.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdater.kt index a82235ee..ab5ee1e4 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifUpdater.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdater.kt @@ -14,17 +14,17 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif - -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.tryWithImageWriteException -import com.ashampoo.kim.format.MetadataUpdater -import com.ashampoo.kim.format.xmp.XmpWriter -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.xmp.XMPMeta -import com.ashampoo.xmp.XMPMetaFactory +package de.stefan_oltmann.kim.format.gif + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.tryWithImageWriteException +import de.stefan_oltmann.kim.format.MetadataUpdater +import de.stefan_oltmann.kim.format.xmp.XmpWriter +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.xmp.XMPMeta +import de.stefan_oltmann.xmp.XMPMetaFactory internal object GifUpdater : MetadataUpdater { override fun update( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifVersion.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifVersion.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifVersion.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifVersion.kt index 3676c874..8a401005 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifVersion.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifVersion.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif public enum class GifVersion(public val bytes: ByteArray) { GIF87A( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifWriter.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifWriter.kt index 2812ba23..4277eb12 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifWriter.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif -import com.ashampoo.kim.format.gif.chunk.GifChunk -import com.ashampoo.kim.format.gif.chunk.GifChunkApplicationExtension -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.kim.output.writeString +import de.stefan_oltmann.kim.format.gif.chunk.GifChunk +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkApplicationExtension +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.writeString public object GifWriter { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunk.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunk.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunk.kt index 56a87a0f..58fbdec1 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunk.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunk.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifChunkType public open class GifChunk( public val type: GifChunkType, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkApplicationExtension.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkApplicationExtension.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkApplicationExtension.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkApplicationExtension.kt index cb1db438..533a0276 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkApplicationExtension.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkApplicationExtension.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.gif.GifChunkType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readBytes +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readBytes public class GifChunkApplicationExtension( header: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkCommentExtension.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkCommentExtension.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkCommentExtension.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkCommentExtension.kt index d0e6f7d7..00aeea63 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkCommentExtension.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkCommentExtension.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifChunkType public class GifChunkCommentExtension( header: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkHeader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkHeader.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkHeader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkHeader.kt index 77309dce..1180406c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkHeader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkHeader.kt @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.gif.GifChunkType -import com.ashampoo.kim.format.gif.GifConstants.GIF_SIGNATURE -import com.ashampoo.kim.format.gif.GifVersion -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.readBytes +package de.stefan_oltmann.kim.format.gif.chunk + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifConstants.GIF_SIGNATURE +import de.stefan_oltmann.kim.format.gif.GifVersion +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.readBytes public class GifChunkHeader( bytes: ByteArray diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageData.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageData.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageData.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageData.kt index e324e397..0f8edbb4 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageData.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageData.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifChunkType public class GifChunkImageData( lzwMinimumCodeSize: Byte, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptor.kt similarity index 86% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptor.kt index 9eeb5913..af81251b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptor.kt @@ -14,17 +14,17 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.gif.GifChunkType -import com.ashampoo.kim.format.gif.GifConstants -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.model.ImageSize -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.write2BytesAsInt +package de.stefan_oltmann.kim.format.gif.chunk + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifConstants +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.model.ImageSize +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.write2BytesAsInt import kotlin.jvm.JvmStatic public class GifChunkImageDescriptor( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt index 23438359..73e5afba 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt @@ -14,18 +14,18 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.gif.GifChunkType -import com.ashampoo.kim.format.gif.GifConstants -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.model.ImageSize -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.write2BytesAsInt +package de.stefan_oltmann.kim.format.gif.chunk + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifConstants +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.model.ImageSize +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.write2BytesAsInt import kotlin.jvm.JvmStatic public class GifChunkLogicalScreenDescriptor( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkPlainTextExtension.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkPlainTextExtension.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkPlainTextExtension.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkPlainTextExtension.kt index 44936b7b..3a7917a2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkPlainTextExtension.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkPlainTextExtension.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifChunkType public class GifChunkPlainTextExtension( header: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkTerminator.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkTerminator.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkTerminator.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkTerminator.kt index 56e1a16f..f9030b4c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkTerminator.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkTerminator.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.gif.GifChunkType -import com.ashampoo.kim.format.gif.GifConstants +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.gif.GifChunkType +import de.stefan_oltmann.kim.format.gif.GifConstants public class GifChunkTerminator( bytes: ByteArray diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegConstants.kt similarity index 99% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegConstants.kt index 96dec45b..3a5b0b1b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegConstants.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder @Suppress("MagicNumber") public object JpegConstants { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParser.kt similarity index 83% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParser.kt index b251ba3c..371077c5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParser.kt @@ -14,42 +14,42 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.getRemainingBytes -import com.ashampoo.kim.common.startsWith -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.jpeg.segment.App13Segment -import com.ashampoo.kim.format.jpeg.segment.AppnSegment -import com.ashampoo.kim.format.jpeg.segment.GenericSegment -import com.ashampoo.kim.format.jpeg.segment.JfifSegment -import com.ashampoo.kim.format.jpeg.segment.Segment -import com.ashampoo.kim.format.jpeg.segment.SofnSegment -import com.ashampoo.kim.format.jpeg.segment.UnknownSegment -import com.ashampoo.kim.format.jpeg.xmp.JpegXmpParser -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.skipBytes -import com.ashampoo.kim.model.ImageFormat -import com.ashampoo.kim.model.ImageSize +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.getRemainingBytes +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.jpeg.segment.App13Segment +import de.stefan_oltmann.kim.format.jpeg.segment.AppnSegment +import de.stefan_oltmann.kim.format.jpeg.segment.GenericSegment +import de.stefan_oltmann.kim.format.jpeg.segment.JfifSegment +import de.stefan_oltmann.kim.format.jpeg.segment.Segment +import de.stefan_oltmann.kim.format.jpeg.segment.SofnSegment +import de.stefan_oltmann.kim.format.jpeg.segment.UnknownSegment +import de.stefan_oltmann.kim.format.jpeg.xmp.JpegXmpParser +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.skipBytes +import de.stefan_oltmann.kim.model.MediaFormat +import de.stefan_oltmann.kim.model.ImageSize public object JpegImageParser : ImageParser { public fun getImageSize(byteReader: ByteReader): ImageSize? { - val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.jpeg.size).toList() + val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.jpeg.size).toList() /* Ensure it's actually a JPEG. */ - require(magicNumberBytes == ImageFormatMagicNumbers.jpeg) { + require(magicNumberBytes == MediaFormatMagicNumbers.jpeg) { "JPEG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}" } @@ -132,7 +132,7 @@ public object JpegImageParser : ImageParser { } @Throws(ImageReadException::class) - override fun parseMetadata(byteReader: ByteReader): ImageMetadata = + override fun parseMetadata(byteReader: ByteReader): MediaMetadata = tryWithImageReadException { val segments = readSegments( @@ -151,8 +151,8 @@ public object JpegImageParser : ImageParser { val xmp = getXmpXml(segments) - return@tryWithImageReadException ImageMetadata( - imageFormat = ImageFormat.JPEG, + return@tryWithImageReadException MediaMetadata( + mediaFormat = MediaFormat.JPEG, imageSize = imageSize, exif = exif, exifBytes = exifBytes, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractor.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractor.kt index 3f951be9..40de60bb 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractor.kt @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.common.toUInt16 -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.MetadataExtractor -import com.ashampoo.kim.input.ByteReader +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.common.toUInt16 +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataExtractor +import de.stefan_oltmann.kim.input.ByteReader public object JpegMetadataExtractor : MetadataExtractor { @@ -40,10 +40,10 @@ public object JpegMetadataExtractor : MetadataExtractor { val bytes = mutableListOf() - val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.jpeg.size).toList() + val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.jpeg.size).toList() /* Ensure it's actually a JPEG. */ - require(magicNumberBytes == ImageFormatMagicNumbers.jpeg) { + require(magicNumberBytes == MediaFormatMagicNumbers.jpeg) { "JPEG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinder.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinder.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinder.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinder.kt index 4ae8b860..335099ef 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinder.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinder.kt @@ -13,25 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.MARKER_END_OF_IMAGE -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.MARKER_END_OF_IMAGE +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipBytes /** * This algorithm quickly identifies the EXIF orientation offset. @@ -48,14 +48,14 @@ public object JpegOrientationOffsetFinder { byteReader: ByteReader ): Long? = tryWithImageReadException { - val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.jpeg.size).toList() + val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.jpeg.size).toList() /* Ensure it's actually a JPEG. */ - require(magicNumberBytes == ImageFormatMagicNumbers.jpeg) { + require(magicNumberBytes == MediaFormatMagicNumbers.jpeg) { "JPEG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}" } - var positionCounter: Long = ImageFormatMagicNumbers.jpeg.size.toLong() + var positionCounter: Long = MediaFormatMagicNumbers.jpeg.size.toLong() @Suppress("LoopWithTooManyJumpStatements") do { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriter.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriter.kt index a46f613d..b7f5bef0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriter.kt @@ -14,28 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.getRemainingBytes -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.format.jpeg.iptc.IptcBlock -import com.ashampoo.kim.format.jpeg.iptc.IptcConstants -import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.jpeg.iptc.IptcParser -import com.ashampoo.kim.format.jpeg.iptc.IptcWriter -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.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 +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.getRemainingBytes +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcBlock +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcConstants +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcWriter +import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPiece +import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPieceImageData +import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPieceSegment +import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPieceSegmentExif +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter import kotlin.jvm.JvmStatic /** diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzer.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzer.kt similarity index 83% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzer.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzer.kt index b288c1ff..ade482d4 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzer.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzer.kt @@ -13,21 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.toUInt16 -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.jpeg.JpegConstants.EOI_MARKER -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.format.jpeg.JpegConstants.SOI_MARKER -import com.ashampoo.kim.format.jpeg.JpegConstants.markerDescription -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.toUInt16 +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.EOI_MARKER +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.SOI_MARKER +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.markerDescription +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.skipBytes import kotlin.jvm.JvmStatic /** @@ -59,7 +59,7 @@ public object JpegSegmentAnalyzer { ) ) - var positionCounter: Int = ImageFormatMagicNumbers.jpeg.size + var positionCounter: Int = MediaFormatMagicNumbers.jpeg.size @Suppress("LoopWithTooManyJumpStatements") do { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdater.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdater.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdater.kt index 0eb63ffb..cf37d9b0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdater.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdater.kt @@ -13,28 +13,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.common.ImageWriteException -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.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.jpeg.iptc.IptcRecord -import com.ashampoo.kim.format.jpeg.iptc.IptcTypes -import com.ashampoo.kim.format.tiff.TiffContents -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.input.readRemainingBytes -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.model.TiffOrientation -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.xmp.XMPMeta -import com.ashampoo.xmp.XMPMetaFactory +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.tryWithImageWriteException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataUpdater +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcRecord +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.xmp.XmpWriter +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.readRemainingBytes +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.model.TiffOrientation +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.xmp.XMPMeta +import de.stefan_oltmann.xmp.XMPMetaFactory internal object JpegUpdater : MetadataUpdater { @@ -51,7 +51,7 @@ internal object JpegUpdater : MetadataUpdater { */ val bytes = byteReader.readRemainingBytes() - if (!bytes.startsWith(ImageFormatMagicNumbers.jpeg)) + if (!bytes.startsWith(MediaFormatMagicNumbers.jpeg)) throw ImageWriteException("Provided input bytes are not JPEG!") val kimMetadata = JpegImageParser.parseMetadata( @@ -73,7 +73,7 @@ internal object JpegUpdater : MetadataUpdater { thumbnailBytes: ByteArray ): ByteArray = tryWithImageWriteException { - if (!bytes.startsWith(ImageFormatMagicNumbers.jpeg)) + if (!bytes.startsWith(MediaFormatMagicNumbers.jpeg)) throw ImageWriteException("Provided input bytes are not JPEG!") val metadata = JpegImageParser.parseMetadata(ByteArrayByteReader(bytes)) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUtils.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUtils.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUtils.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUtils.kt index 76b85e1d..78c55d0f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUtils.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUtils.kt @@ -14,14 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.common.toUInt16 -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.readAndVerifyBytes -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.readRemainingBytes +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.common.toUInt16 +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.readAndVerifyBytes +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.readRemainingBytes internal object JpegUtils { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegVisitor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegVisitor.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegVisitor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegVisitor.kt index 0eef5371..3ab700bb 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegVisitor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegVisitor.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg internal interface JpegVisitor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcBlock.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcBlock.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcBlock.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcBlock.kt index f2d1e89a..66697a86 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcBlock.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcBlock.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc /** * Represents an IPTC block, a set of key-value pairs of Photoshop IPTC data. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcConstants.kt similarity index 99% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcConstants.kt index 0871b3d6..f83f2a04 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcConstants.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc internal object IptcConstants { const val IPTC_NON_EXTENDED_RECORD_MAXIMUM_SIZE = 32_767 diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcMetadata.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcMetadata.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcMetadata.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcMetadata.kt index d6dd05db..47cc6a07 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcMetadata.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcMetadata.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc /** * IPTC as located in JPEG APP13 segments diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParser.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParser.kt index 7c379b82..d1fe69a5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParser.kt @@ -14,24 +14,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.decodeLatin1BytesToString -import com.ashampoo.kim.common.slice -import com.ashampoo.kim.common.startsWith -import com.ashampoo.kim.common.toInt -import com.ashampoo.kim.common.toUInt16 -import com.ashampoo.kim.common.toUInt8 -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.format.jpeg.iptc.IptcTypes.Companion.getIptcType -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipToQuad +package de.stefan_oltmann.kim.format.jpeg.iptc + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.decodeLatin1BytesToString +import de.stefan_oltmann.kim.common.slice +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.toInt +import de.stefan_oltmann.kim.common.toUInt16 +import de.stefan_oltmann.kim.common.toUInt8 +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes.Companion.getIptcType +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipToQuad import kotlin.jvm.JvmStatic public object IptcParser { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcRecord.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcRecord.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcRecord.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcRecord.kt index e9feae34..ff16152e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcRecord.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcRecord.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc /* * Represents an IPTC record, a single key-value pair of Photoshop IPTC data. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcType.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcType.kt index 2917e9e1..962b398e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcType.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc public interface IptcType { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTypes.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTypes.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTypes.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTypes.kt index b8290593..2dc9d5a5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTypes.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTypes.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc @Suppress("MagicNumber") internal enum class IptcTypes( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriter.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriter.kt index a630a945..921aa79c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriter.kt @@ -14,14 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc - -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.format.jpeg.iptc.IptcParser.APP13_BYTE_ORDER -import com.ashampoo.kim.output.BigEndianBinaryByteWriter -import com.ashampoo.kim.output.BinaryByteWriter -import com.ashampoo.kim.output.ByteArrayByteWriter +package de.stefan_oltmann.kim.format.jpeg.iptc + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser.APP13_BYTE_ORDER +import de.stefan_oltmann.kim.output.BigEndianBinaryByteWriter +import de.stefan_oltmann.kim.output.BinaryByteWriter +import de.stefan_oltmann.kim.output.ByteArrayByteWriter import kotlin.jvm.JvmStatic public object IptcWriter { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPiece.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPiece.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPiece.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPiece.kt index 2b650e5f..470e60f2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPiece.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPiece.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.jfif +package de.stefan_oltmann.kim.format.jpeg.jfif -import com.ashampoo.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.ByteWriter internal fun interface JFIFPiece { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceImageData.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceImageData.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceImageData.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceImageData.kt index dd5144e6..5229e1f9 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceImageData.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceImageData.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.jfif +package de.stefan_oltmann.kim.format.jpeg.jfif -import com.ashampoo.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.ByteWriter internal class JFIFPieceImageData( private val markerBytes: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegment.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegment.kt index c275525a..9201982b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegment.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.jfif +package de.stefan_oltmann.kim.format.jpeg.jfif -import com.ashampoo.kim.common.startsWith -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.format.jpeg.iptc.IptcParser -import com.ashampoo.kim.output.ByteWriter +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser +import de.stefan_oltmann.kim.output.ByteWriter internal open class JFIFPieceSegment( val marker: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt index fe775d2c..92e4ab2b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.jfif +package de.stefan_oltmann.kim.format.jpeg.jfif internal class JFIFPieceSegmentExif( marker: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/App13Segment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/App13Segment.kt similarity index 84% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/App13Segment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/App13Segment.kt index 4c8ffe11..218a1ac7 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/App13Segment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/App13Segment.kt @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment +package de.stefan_oltmann.kim.format.jpeg.segment -import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.jpeg.iptc.IptcParser -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader internal class App13Segment(marker: Int, markerLength: Int, byteReader: ByteReader) : AppnSegment(marker, markerLength, byteReader) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/AppnSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/AppnSegment.kt similarity index 83% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/AppnSegment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/AppnSegment.kt index 28c5517c..a54325dc 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/AppnSegment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/AppnSegment.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment +package de.stefan_oltmann.kim.format.jpeg.segment -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader internal open class AppnSegment(marker: Int, markerLength: Int, byteReader: ByteReader) : GenericSegment(marker, markerLength, byteReader) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/GenericSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/GenericSegment.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/GenericSegment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/GenericSegment.kt index b36f4839..2d1d629f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/GenericSegment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/GenericSegment.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment +package de.stefan_oltmann.kim.format.jpeg.segment -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.readBytes +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.readBytes internal abstract class GenericSegment : Segment { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/JfifSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/JfifSegment.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/JfifSegment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/JfifSegment.kt index 400b1987..6c49d2a3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/JfifSegment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/JfifSegment.kt @@ -14,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment +package de.stefan_oltmann.kim.format.jpeg.segment -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipBytes +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipBytes internal class JfifSegment( marker: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/Segment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/Segment.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/Segment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/Segment.kt index 45a4e8f6..80f3d049 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/Segment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/Segment.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment +package de.stefan_oltmann.kim.format.jpeg.segment internal abstract class Segment(val marker: Int, val length: Int) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/SofnSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/SofnSegment.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/SofnSegment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/SofnSegment.kt index 1b45f3eb..f3eb12b2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/SofnSegment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/SofnSegment.kt @@ -14,14 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment - -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.jpeg.segment + +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.skipBytes internal class SofnSegment(marker: Int, markerLength: Int, byteReader: ByteReader) : Segment(marker, markerLength) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/UnknownSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/UnknownSegment.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/UnknownSegment.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/UnknownSegment.kt index 36fd7863..56bbb0ae 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/UnknownSegment.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/UnknownSegment.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.segment +package de.stefan_oltmann.kim.format.jpeg.segment internal class UnknownSegment(marker: Int, bytes: ByteArray) : GenericSegment(marker, bytes) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/xmp/JpegXmpParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/xmp/JpegXmpParser.kt similarity index 83% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/xmp/JpegXmpParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/xmp/JpegXmpParser.kt index bbbdf758..7892dc58 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/xmp/JpegXmpParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/xmp/JpegXmpParser.kt @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.xmp +package de.stefan_oltmann.kim.format.jpeg.xmp -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.slice -import com.ashampoo.kim.common.startsWith -import com.ashampoo.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.slice +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.format.jpeg.JpegConstants internal object JpegXmpParser { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlReader.kt similarity index 71% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlReader.kt index 9315be8f..243f97c0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlReader.kt @@ -13,23 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl +package de.stefan_oltmann.kim.format.jxl -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.bmff.box.Box -import com.ashampoo.kim.format.jxl.box.ExifBox -import com.ashampoo.kim.format.jxl.box.XmlBox -import com.ashampoo.kim.model.ImageFormat +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.jxl.box.ExifBox +import de.stefan_oltmann.kim.format.jxl.box.XmlBox +import de.stefan_oltmann.kim.model.MediaFormat internal object JxlReader { - fun createMetadata(allBoxes: List): ImageMetadata { + fun createMetadata(allBoxes: List): MediaMetadata { val exifBox = allBoxes.filterIsInstance().firstOrNull() val xmlBox = allBoxes.filterIsInstance().firstOrNull() - return ImageMetadata( - imageFormat = ImageFormat.JXL, + return MediaMetadata( + mediaFormat = MediaFormat.JXL, imageSize = null, // TODO https://github.com/Ashampoo/kim/issues/65 exif = exifBox?.tiffContents, exifBytes = exifBox?.exifBytes, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdater.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlUpdater.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdater.kt index c663685a..65e6ce10 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlUpdater.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdater.kt @@ -13,24 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl - -import com.ashampoo.kim.common.ImageWriteException -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.bmff.BoxReader -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 -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.xmp.XMPMeta -import com.ashampoo.xmp.XMPMetaFactory +package de.stefan_oltmann.kim.format.jxl + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.tryWithImageWriteException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataUpdater +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase +import de.stefan_oltmann.kim.format.xmp.XmpWriter +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.xmp.XMPMeta +import de.stefan_oltmann.xmp.XMPMetaFactory internal object JxlUpdater : MetadataUpdater { @@ -97,7 +97,7 @@ internal object JxlUpdater : MetadataUpdater { thumbnailBytes: ByteArray ): ByteArray = tryWithImageWriteException { - if (!bytes.startsWith(ImageFormatMagicNumbers.jxl)) + if (!bytes.startsWith(MediaFormatMagicNumbers.jxl)) throw ImageWriteException("Provided input bytes are not JXL!") val byteReader = ByteArrayByteReader(bytes) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriter.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriter.kt index abb30589..d1f9e0c3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriter.kt @@ -13,19 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl - -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.bmff.BMFFConstants -import com.ashampoo.kim.format.bmff.BoxReader -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.Box -import com.ashampoo.kim.format.jxl.box.CompressedBox -import com.ashampoo.kim.format.jxl.box.JxlParticalCodestreamBox -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.kim.output.writeInt -import com.ashampoo.kim.output.writeLong +package de.stefan_oltmann.kim.format.jxl + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.bmff.BMFFConstants +import de.stefan_oltmann.kim.format.bmff.BoxReader +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.jxl.box.CompressedBox +import de.stefan_oltmann.kim.format.jxl.box.JxlParticalCodestreamBox +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.writeInt +import de.stefan_oltmann.kim.output.writeLong import kotlin.jvm.JvmStatic public object JxlWriter { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/CompressedBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/CompressedBox.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/CompressedBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/CompressedBox.kt index 606072e0..8955cd3d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/CompressedBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/CompressedBox.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl.box +package de.stefan_oltmann.kim.format.jxl.box -import com.ashampoo.kim.format.bmff.BMFFConstants -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.bmff.BMFFConstants +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.Box /** * JPEG XL brob box for brotli compressed Exif or XMP diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/ExifBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/ExifBox.kt similarity index 73% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/ExifBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/ExifBox.kt index 2594bf31..89a3183d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/ExifBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/ExifBox.kt @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl.box - -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.Box -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.readRemainingBytes +package de.stefan_oltmann.kim.format.jxl.box + +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.readRemainingBytes /** * JPEG XL Exif box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/JxlParticalCodestreamBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/JxlParticalCodestreamBox.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/JxlParticalCodestreamBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/JxlParticalCodestreamBox.kt index 549d4f21..310fd51d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/JxlParticalCodestreamBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/JxlParticalCodestreamBox.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl.box +package de.stefan_oltmann.kim.format.jxl.box -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.Box /** * JPEG XL jxlp box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/XmlBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/XmlBox.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/XmlBox.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/XmlBox.kt index 4134fe6a..c2b97269 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/XmlBox.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/XmlBox.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl.box +package de.stefan_oltmann.kim.format.jxl.box -import com.ashampoo.kim.format.bmff.BoxType -import com.ashampoo.kim.format.bmff.box.Box +import de.stefan_oltmann.kim.format.bmff.BoxType +import de.stefan_oltmann.kim.format.bmff.box.Box /** * JPEG XL XML box diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/nef/NefPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/nef/NefPreviewExtractor.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/nef/NefPreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/nef/NefPreviewExtractor.kt index 17b0d24c..b93f649b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/nef/NefPreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/nef/NefPreviewExtractor.kt @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.nef - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.TiffPreviewExtractor -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.RandomAccessByteReader +package de.stefan_oltmann.kim.format.nef + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.TiffPreviewExtractor +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.RandomAccessByteReader public object NefPreviewExtractor : TiffPreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngChunkType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngChunkType.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngChunkType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngChunkType.kt index 50eb9ac1..2dbeef3e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngChunkType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngChunkType.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.common.toFourCCTypeString -import com.ashampoo.kim.format.png.PngConstants.TPYE_LENGTH +import de.stefan_oltmann.kim.common.toFourCCTypeString +import de.stefan_oltmann.kim.format.png.PngConstants.TPYE_LENGTH /** * Type of a PNG chunk. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngConstants.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngConstants.kt index 8d1dd004..31d4ac3b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngConstants.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder public object PngConstants { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngCrc.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngCrc.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngCrc.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngCrc.kt index 32b9fa43..4bed2f46 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngCrc.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngCrc.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png @Suppress("MagicNumber") internal object PngCrc { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngImageParser.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngImageParser.kt index 7103dfc8..0a5a6c2e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngImageParser.kt @@ -14,32 +14,32 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.convertHexStringToByteArray -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.jpeg.JpegConstants -import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.jpeg.iptc.IptcParser -import com.ashampoo.kim.format.png.PngConstants.PNG_BYTE_ORDER -import com.ashampoo.kim.format.png.chunk.PngChunk -import com.ashampoo.kim.format.png.chunk.PngChunkExif -import com.ashampoo.kim.format.png.chunk.PngChunkIhdr -import com.ashampoo.kim.format.png.chunk.PngChunkItxt -import com.ashampoo.kim.format.png.chunk.PngChunkText -import com.ashampoo.kim.format.png.chunk.PngChunkZtxt -import com.ashampoo.kim.format.png.chunk.PngTextChunk -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readAndVerifyBytes -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipBytes -import com.ashampoo.kim.model.ImageFormat +package de.stefan_oltmann.kim.format.png + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.convertHexStringToByteArray +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser +import de.stefan_oltmann.kim.format.png.PngConstants.PNG_BYTE_ORDER +import de.stefan_oltmann.kim.format.png.chunk.PngChunk +import de.stefan_oltmann.kim.format.png.chunk.PngChunkExif +import de.stefan_oltmann.kim.format.png.chunk.PngChunkIhdr +import de.stefan_oltmann.kim.format.png.chunk.PngChunkItxt +import de.stefan_oltmann.kim.format.png.chunk.PngChunkText +import de.stefan_oltmann.kim.format.png.chunk.PngChunkZtxt +import de.stefan_oltmann.kim.format.png.chunk.PngTextChunk +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readAndVerifyBytes +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipBytes +import de.stefan_oltmann.kim.model.MediaFormat import kotlin.jvm.JvmStatic public object PngImageParser : ImageParser { @@ -56,7 +56,7 @@ public object PngImageParser : ImageParser { ) @Throws(ImageReadException::class) - override fun parseMetadata(byteReader: ByteReader): ImageMetadata = + override fun parseMetadata(byteReader: ByteReader): MediaMetadata = tryWithImageReadException { val chunks = readChunks(byteReader, metadataChunkTypes) @@ -69,7 +69,7 @@ public object PngImageParser : ImageParser { @Throws(ImageReadException::class) @JvmStatic - public fun parseMetadataFromChunks(chunks: List): ImageMetadata = + public fun parseMetadataFromChunks(chunks: List): MediaMetadata = tryWithImageReadException { require(chunks.isNotEmpty()) { @@ -99,8 +99,8 @@ public object PngImageParser : ImageParser { val xmp = getXmpXml(chunks) - return@tryWithImageReadException ImageMetadata( - imageFormat = ImageFormat.PNG, + return@tryWithImageReadException MediaMetadata( + mediaFormat = MediaFormat.PNG, imageSize = imageSize, exif = exifPair?.second, exifBytes = exifPair?.first, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractor.kt similarity index 92% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractor.kt index d8be9b19..cfe201fc 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractor.kt @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.MetadataExtractor -import com.ashampoo.kim.input.ByteReader +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataExtractor +import de.stefan_oltmann.kim.input.ByteReader public object PngMetadataExtractor : MetadataExtractor { @@ -59,10 +59,10 @@ public object PngMetadataExtractor : MetadataExtractor { val bytes = mutableListOf() - val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.png.size).toList() + val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.png.size).toList() /* Ensure it's actually a PNG. */ - require(magicNumberBytes == ImageFormatMagicNumbers.png) { + require(magicNumberBytes == MediaFormatMagicNumbers.png) { "PNG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}" } @@ -132,10 +132,10 @@ public object PngMetadataExtractor : MetadataExtractor { val bytes = mutableListOf() - val magicNumberBytes = reader.readBytes(ImageFormatMagicNumbers.png.size).toList() + val magicNumberBytes = reader.readBytes(MediaFormatMagicNumbers.png.size).toList() /* Ensure it's actually a PNG. */ - require(magicNumberBytes == ImageFormatMagicNumbers.png) { + require(magicNumberBytes == MediaFormatMagicNumbers.png) { "PNG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}" } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngUpdater.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngUpdater.kt index 66e972fc..320579cc 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngUpdater.kt @@ -13,23 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png - -import com.ashampoo.kim.common.ImageWriteException -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.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 -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.xmp.XMPMeta -import com.ashampoo.xmp.XMPMetaFactory +package de.stefan_oltmann.kim.format.png + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.tryWithImageWriteException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataUpdater +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase +import de.stefan_oltmann.kim.format.xmp.XmpWriter +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.xmp.XMPMeta +import de.stefan_oltmann.xmp.XMPMetaFactory internal object PngUpdater : MetadataUpdater { @@ -99,7 +99,7 @@ internal object PngUpdater : MetadataUpdater { thumbnailBytes: ByteArray ): ByteArray = tryWithImageWriteException { - if (!bytes.startsWith(ImageFormatMagicNumbers.png)) + if (!bytes.startsWith(MediaFormatMagicNumbers.png)) throw ImageWriteException("Provided input bytes are not PNG!") val byteReader = ByteArrayByteReader(bytes) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngWriter.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngWriter.kt index 35dfc51a..5d4de1ea 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngWriter.kt @@ -14,19 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png - -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.png.PngConstants.PNG_BYTE_ORDER -import com.ashampoo.kim.format.png.PngCrc.continuePartialCrc -import com.ashampoo.kim.format.png.PngCrc.finishPartialCrc -import com.ashampoo.kim.format.png.PngCrc.startPartialCrc -import com.ashampoo.kim.format.png.chunk.PngChunk -import com.ashampoo.kim.format.png.chunk.PngTextChunk -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.kim.output.writeInt +package de.stefan_oltmann.kim.format.png + +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.png.PngConstants.PNG_BYTE_ORDER +import de.stefan_oltmann.kim.format.png.PngCrc.continuePartialCrc +import de.stefan_oltmann.kim.format.png.PngCrc.finishPartialCrc +import de.stefan_oltmann.kim.format.png.PngCrc.startPartialCrc +import de.stefan_oltmann.kim.format.png.chunk.PngChunk +import de.stefan_oltmann.kim.format.png.chunk.PngTextChunk +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.writeInt public object PngWriter { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunk.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunk.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunk.kt index 404a59c5..55de22e2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunk.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunk.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk +package de.stefan_oltmann.kim.format.png.chunk -import com.ashampoo.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.format.png.PngChunkType @Suppress("MagicNumber") public open class PngChunk( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkExif.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkExif.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkExif.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkExif.kt index 0fdb7377..445626e2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkExif.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkExif.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk +package de.stefan_oltmann.kim.format.png.chunk -import com.ashampoo.kim.format.png.PngChunkType -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader public class PngChunkExif( bytes: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkIhdr.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkIhdr.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkIhdr.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkIhdr.kt index a4045833..673473e1 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkIhdr.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkIhdr.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk +package de.stefan_oltmann.kim.format.png.chunk -import com.ashampoo.kim.format.png.PngChunkType -import com.ashampoo.kim.format.png.PngConstants.PNG_BYTE_ORDER -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.format.png.PngConstants.PNG_BYTE_ORDER +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.model.ImageSize public class PngChunkIhdr( bytes: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkItxt.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkItxt.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkItxt.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkItxt.kt index 7ddebff5..6ded59d3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkItxt.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkItxt.kt @@ -14,15 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.decodeLatin1BytesToString -import com.ashampoo.kim.common.decompress -import com.ashampoo.kim.common.indexOfNullTerminator -import com.ashampoo.kim.common.slice -import com.ashampoo.kim.format.png.PngChunkType -import com.ashampoo.kim.format.png.PngConstants +package de.stefan_oltmann.kim.format.png.chunk + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.decodeLatin1BytesToString +import de.stefan_oltmann.kim.common.decompress +import de.stefan_oltmann.kim.common.indexOfNullTerminator +import de.stefan_oltmann.kim.common.slice +import de.stefan_oltmann.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.format.png.PngConstants public class PngChunkItxt( bytes: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkText.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkText.kt similarity index 84% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkText.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkText.kt index 22b20fa9..3fba774a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkText.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkText.kt @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk +package de.stefan_oltmann.kim.format.png.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.decodeLatin1BytesToString -import com.ashampoo.kim.common.indexOfNullTerminator -import com.ashampoo.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.decodeLatin1BytesToString +import de.stefan_oltmann.kim.common.indexOfNullTerminator +import de.stefan_oltmann.kim.format.png.PngChunkType public class PngChunkText( chunkType: PngChunkType, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkZtxt.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkZtxt.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkZtxt.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkZtxt.kt index a5564784..670ea3d0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkZtxt.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkZtxt.kt @@ -14,14 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk +package de.stefan_oltmann.kim.format.png.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.decodeLatin1BytesToString -import com.ashampoo.kim.common.decompress -import com.ashampoo.kim.common.indexOfNullTerminator -import com.ashampoo.kim.format.png.PngChunkType -import com.ashampoo.kim.format.png.PngConstants +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.decodeLatin1BytesToString +import de.stefan_oltmann.kim.common.decompress +import de.stefan_oltmann.kim.common.indexOfNullTerminator +import de.stefan_oltmann.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.format.png.PngConstants public class PngChunkZtxt( bytes: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngTextChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngTextChunk.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngTextChunk.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngTextChunk.kt index 1d1c29e1..1e5a3ba0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngTextChunk.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngTextChunk.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png.chunk +package de.stefan_oltmann.kim.format.png.chunk -import com.ashampoo.kim.format.png.PngChunkType +import de.stefan_oltmann.kim.format.png.PngChunkType public abstract class PngTextChunk( chunkType: PngChunkType, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafImageParser.kt similarity index 63% rename from src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafImageParser.kt index a3134221..c79928ea 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafImageParser.kt @@ -13,20 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.raf - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.jpeg.JpegImageParser -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readAndVerifyBytes -import com.ashampoo.kim.input.skipBytes -import com.ashampoo.kim.model.ImageFormat +package de.stefan_oltmann.kim.format.raf + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.jpeg.JpegImageParser +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readAndVerifyBytes +import de.stefan_oltmann.kim.input.skipBytes +import de.stefan_oltmann.kim.model.MediaFormat public object RafImageParser : ImageParser { @@ -36,12 +36,12 @@ public object RafImageParser : ImageParser { */ @Throws(ImageReadException::class) @Suppress("ComplexCondition", "LoopWithTooManyJumpStatements") - override fun parseMetadata(byteReader: ByteReader): ImageMetadata = + override fun parseMetadata(byteReader: ByteReader): MediaMetadata = tryWithImageReadException { byteReader.readAndVerifyBytes( "RAF magic number", - ImageFormatMagicNumbers.raf.toByteArray() + MediaFormatMagicNumbers.raf.toByteArray() ) byteReader.skipBytes("86 header bytes", RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT) @@ -50,12 +50,12 @@ public object RafImageParser : ImageParser { @Suppress("MagicNumber") val remainingBytesToOffset = offset - - (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + ImageFormatMagicNumbers.raf.size + 4) + (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + MediaFormatMagicNumbers.raf.size + 4) byteReader.skipBytes("Skip JPEG offset", remainingBytesToOffset) return@tryWithImageReadException JpegImageParser .parseMetadata(byteReader) - .copy(imageFormat = ImageFormat.RAF) + .withMediaFormat(mediaFormat = MediaFormat.RAF) } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractor.kt similarity index 68% rename from src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractor.kt index 7604c1b8..5417a68e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractor.kt @@ -13,18 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.raf - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.MetadataExtractor -import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readAndVerifyBytes -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.raf + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataExtractor +import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readAndVerifyBytes +import de.stefan_oltmann.kim.input.skipBytes public object RafMetadataExtractor : MetadataExtractor { @@ -42,7 +42,7 @@ public object RafMetadataExtractor : MetadataExtractor { byteReader.readAndVerifyBytes( "RAF magic number", - ImageFormatMagicNumbers.raf.toByteArray() + MediaFormatMagicNumbers.raf.toByteArray() ) byteReader.skipBytes("86 header bytes", REMAINING_HEADER_BYTE_COUNT) @@ -51,7 +51,7 @@ public object RafMetadataExtractor : MetadataExtractor { @Suppress("MagicNumber") val remainingBytesToOffset = offset - - (REMAINING_HEADER_BYTE_COUNT + ImageFormatMagicNumbers.raf.size + 4) + (REMAINING_HEADER_BYTE_COUNT + MediaFormatMagicNumbers.raf.size + 4) byteReader.skipBytes("Skip JPEG offset", remainingBytesToOffset) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafPreviewExtractor.kt similarity index 72% rename from src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafPreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafPreviewExtractor.kt index 7e962c10..e447c38a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafPreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafPreviewExtractor.kt @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.raf - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readAndVerifyBytes -import com.ashampoo.kim.input.skipBytes +package de.stefan_oltmann.kim.format.raf + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readAndVerifyBytes +import de.stefan_oltmann.kim.input.skipBytes import kotlin.jvm.JvmStatic public object RafPreviewExtractor { @@ -35,7 +35,7 @@ public object RafPreviewExtractor { reader.readAndVerifyBytes( "RAF magic number", - ImageFormatMagicNumbers.raf.toByteArray() + MediaFormatMagicNumbers.raf.toByteArray() ) reader.skipBytes("86 header bytes", RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT) @@ -46,7 +46,7 @@ public object RafPreviewExtractor { @Suppress("MagicNumber") val remainingBytesToOffset = offset - - (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + ImageFormatMagicNumbers.raf.size + 8) + (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + MediaFormatMagicNumbers.raf.size + 8) reader.skipBytes("Skip JPEG offset", remainingBytesToOffset) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/rw2/Rw2PreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/rw2/Rw2PreviewExtractor.kt similarity index 78% rename from src/commonMain/kotlin/com/ashampoo/kim/format/rw2/Rw2PreviewExtractor.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/rw2/Rw2PreviewExtractor.kt index f0209c0a..6dbdb88f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/rw2/Rw2PreviewExtractor.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/rw2/Rw2PreviewExtractor.kt @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.rw2 +package de.stefan_oltmann.kim.format.rw2 -import com.ashampoo.kim.format.TiffPreviewExtractor -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.RandomAccessByteReader +import de.stefan_oltmann.kim.format.TiffPreviewExtractor +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.RandomAccessByteReader public object Rw2PreviewExtractor : TiffPreviewExtractor { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/GPSInfo.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/GPSInfo.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/GPSInfo.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/GPSInfo.kt index 802a4ba0..eca4f147 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/GPSInfo.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/GPSInfo.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff -import com.ashampoo.kim.common.GpsUtil.MINUTES_PER_HOUR -import com.ashampoo.kim.common.GpsUtil.SECONDS_PER_HOUR -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.RationalNumbers -import com.ashampoo.kim.format.tiff.constant.GpsTag +import de.stefan_oltmann.kim.common.GpsUtil.MINUTES_PER_HOUR +import de.stefan_oltmann.kim.common.GpsUtil.SECONDS_PER_HOUR +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.RationalNumbers +import de.stefan_oltmann.kim.format.tiff.constant.GpsTag internal data class GPSInfo( private val latitudeRef: String, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/ImageDataElement.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/ImageDataElement.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/ImageDataElement.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/ImageDataElement.kt index 83f53661..59d0b2e9 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/ImageDataElement.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/ImageDataElement.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff public open class ImageDataElement( offset: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffContents.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffContents.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffContents.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffContents.kt index fe2059f9..b8434aae 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffContents.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffContents.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff -import com.ashampoo.kim.format.tiff.geotiff.GeoTiffDirectory -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.geotiff.GeoTiffDirectory +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet public data class TiffContents( val header: TiffHeader, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffDirectory.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffDirectory.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffDirectory.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffDirectory.kt index f2db8e8e..ef1d05f0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffDirectory.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffDirectory.kt @@ -14,25 +14,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toInt -import com.ashampoo.kim.common.toInts -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes -import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs -import com.ashampoo.kim.format.tiff.write.TiffOutputDirectory -import com.ashampoo.kim.format.tiff.write.TiffOutputField -import com.ashampoo.kim.model.TiffOrientation +package de.stefan_oltmann.kim.format.tiff + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toInt +import de.stefan_oltmann.kim.common.toInts +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputDirectory +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputField +import de.stefan_oltmann.kim.model.TiffOrientation /** * Provides methods and elements for accessing an Image File Directory (IFD) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffElement.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffElement.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffElement.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffElement.kt index 1d2da4d3..03647a8d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffElement.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffElement.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff public open class TiffElement( public val debugDescription: String, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffField.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffField.kt similarity index 92% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffField.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffField.kt index f7ad7591..787b5e60 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffField.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffField.kt @@ -14,18 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.HEX_RADIX -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.RationalNumber -import com.ashampoo.kim.common.RationalNumbers -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.format.tiff.TiffTags.getTag -import com.ashampoo.kim.format.tiff.fieldtype.FieldType -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText +package de.stefan_oltmann.kim.format.tiff + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.HEX_RADIX +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.RationalNumber +import de.stefan_oltmann.kim.common.RationalNumbers +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.format.tiff.TiffTags.getTag +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText /** * A TIFF field in a TIFF directory. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffHeader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffHeader.kt similarity index 86% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffHeader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffHeader.kt index 8e09684a..0d9e9a0e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffHeader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffHeader.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants public data class TiffHeader( val byteOrder: ByteOrder, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffImageParser.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffImageParser.kt index fbbf0d06..5dd4bef5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffImageParser.kt @@ -14,24 +14,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.DefaultRandomAccessByteReader -import com.ashampoo.kim.model.ImageFormat -import com.ashampoo.kim.model.ImageSize +package de.stefan_oltmann.kim.format.tiff + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.DefaultRandomAccessByteReader +import de.stefan_oltmann.kim.model.MediaFormat +import de.stefan_oltmann.kim.model.ImageSize public object TiffImageParser : ImageParser { @Throws(ImageReadException::class) - override fun parseMetadata(byteReader: ByteReader): ImageMetadata = + override fun parseMetadata(byteReader: ByteReader): MediaMetadata = tryWithImageReadException { /** @@ -45,8 +45,8 @@ public object TiffImageParser : ImageParser { val imageSize = getImageSize(exif) val xmp = getXmpXml(exif) - return@tryWithImageReadException ImageMetadata( - imageFormat = ImageFormat.TIFF, + return@tryWithImageReadException MediaMetadata( + mediaFormat = MediaFormat.TIFF, imageSize = imageSize, exif = exif, exifBytes = null, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffReader.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffReader.kt index dff43d24..23f96bfc 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffReader.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * Copyright 2007-2023 The Apache Software Foundation * @@ -14,36 +15,36 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.head -import com.ashampoo.kim.common.startsWith -import com.ashampoo.kim.common.toInt -import com.ashampoo.kim.format.ImageFormatMagicNumbers -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.GeoTiffTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD1 -import com.ashampoo.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD2 -import com.ashampoo.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD3 -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_TYPE_IFD1 -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.format.tiff.fieldtype.FieldType.Companion.getFieldType -import com.ashampoo.kim.format.tiff.geotiff.GeoTiffDirectory -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.RandomAccessByteReader -import com.ashampoo.kim.input.read2BytesAsInt -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readByte -import com.ashampoo.kim.input.readByteAsInt -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipBytes -import com.ashampoo.kim.output.ByteArrayByteWriter +package de.stefan_oltmann.kim.format.tiff + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.head +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.toInt +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD1 +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD2 +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD3 +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_TYPE_IFD1 +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType.Companion.getFieldType +import de.stefan_oltmann.kim.format.tiff.geotiff.GeoTiffDirectory +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.RandomAccessByteReader +import de.stefan_oltmann.kim.input.read2BytesAsInt +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readByte +import de.stefan_oltmann.kim.input.readByteAsInt +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipBytes +import de.stefan_oltmann.kim.output.ByteArrayByteWriter import kotlin.jvm.JvmStatic @Suppress("TooManyFunctions") @@ -376,7 +377,7 @@ public object TiffReader { if (valueOrOffset < 0 || endPos < 0 || endPos > byteReader.contentLength) continue - byteReader.readBytes(valueOrOffset.toInt(), valueLength.toInt()) + byteReader.readBytes(valueOrOffset, valueLength) } else { @@ -429,7 +430,7 @@ public object TiffReader { if (length <= 0) return null - val bytes = byteReader.readBytes(offset.toInt(), length) + val bytes = byteReader.readBytes(offset, length) if (bytes.size != length) return null @@ -438,7 +439,7 @@ public object TiffReader { * Ignore it if it's not a JPEG. * Some files have random garbage bytes here. */ - if (!bytes.startsWith(ImageFormatMagicNumbers.jpeg)) + if (!bytes.startsWith(MediaFormatMagicNumbers.jpeg)) return null /* @@ -478,7 +479,7 @@ public object TiffReader { if (length <= 0) continue - val bytes = byteReader.readBytes(offset.toInt(), length) + val bytes = byteReader.readBytes(offset, length) /* * Break if something is wrong. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffTags.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffTags.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffTags.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffTags.kt index e1643f25..e4bb3236 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffTags.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffTags.kt @@ -14,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff -import com.ashampoo.kim.format.tiff.constant.CanonTag -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN -import com.ashampoo.kim.format.tiff.constant.GeoTiffTag -import com.ashampoo.kim.format.tiff.constant.GpsTag -import com.ashampoo.kim.format.tiff.constant.NikonTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.constant.CanonTag +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN +import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag +import de.stefan_oltmann.kim.format.tiff.constant.GpsTag +import de.stefan_oltmann.kim.format.tiff.constant.NikonTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo internal object TiffTags { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/CanonTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/CanonTag.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/CanonTag.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/CanonTag.kt index e8f59027..99ec2603 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/CanonTag.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/CanonTag.kt @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant +package de.stefan_oltmann.kim.format.tiff.constant -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefineds +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefineds /** * Canon MakerNote Tags diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/ExifTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/ExifTag.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/ExifTag.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/ExifTag.kt index e71548c9..6b4d80af 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/ExifTag.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/ExifTag.kt @@ -14,28 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant - -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0 -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD1 -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD2 -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD3 -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte -import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes -import com.ashampoo.kim.format.tiff.taginfo.TagInfoDouble -import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSRational -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts -import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefined -import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefineds +package de.stefan_oltmann.kim.format.tiff.constant + +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0 +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD1 +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD2 +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD3 +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDouble +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSRational +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefined +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefineds /** * Standard Exif Tags as defined in EXIF 2.3 standard diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GeoTiffTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GeoTiffTag.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GeoTiffTag.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GeoTiffTag.kt index a6787a53..c2262609 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GeoTiffTag.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GeoTiffTag.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant +package de.stefan_oltmann.kim.format.tiff.constant -import com.ashampoo.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoDoubles -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDoubles +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts /** * See https://exiftool.org/TagNames/GeoTiff.html diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GpsTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GpsTag.kt similarity index 93% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GpsTag.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GpsTag.kt index ed33e682..e2d5b846 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GpsTag.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GpsTag.kt @@ -14,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant - -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte -import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes -import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort +package de.stefan_oltmann.kim.format.tiff.constant + +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort @Suppress("MagicNumber") public object GpsTag { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/NikonTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/NikonTag.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/NikonTag.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/NikonTag.kt index 7c32325e..50928aad 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/NikonTag.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/NikonTag.kt @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant +package de.stefan_oltmann.kim.format.tiff.constant -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals -import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefineds +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefineds /** * Nikon MakerNote Tags diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffConstants.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffConstants.kt index 09b19d40..ac27fed0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffConstants.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant +package de.stefan_oltmann.kim.format.tiff.constant -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder /** * Defines constants for internal elements from TIFF files and for allowing diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffDirectoryType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffDirectoryType.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffDirectoryType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffDirectoryType.kt index 3a60d21f..05829fff 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffDirectoryType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffDirectoryType.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant +package de.stefan_oltmann.kim.format.tiff.constant public enum class TiffDirectoryType( public val typeId: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffTag.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffTag.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffTag.kt index 8dd6fbef..6ddedf43 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffTag.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffTag.kt @@ -14,19 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.constant - -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0 -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte -import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts +package de.stefan_oltmann.kim.format.tiff.constant + +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0 +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts /** * Standard Tiff Tags diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldType.kt similarity index 59% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldType.kt index 5c57a74f..e3e0b698 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldType.kt @@ -14,23 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_ASCII_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_BYTE_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_DOUBLE_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_FLOAT_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_IFD_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_RATIONAL_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SBYTE_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SHORT_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SLONG_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SRATIONAL_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SSHORT_INDEX -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_UNDEFINED_INDEX +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_ASCII_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_BYTE_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_DOUBLE_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_FLOAT_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_IFD_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_RATIONAL_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SBYTE_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SHORT_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SLONG_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SRATIONAL_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SSHORT_INDEX +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_UNDEFINED_INDEX public interface FieldType { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeAscii.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeAscii.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeAscii.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeAscii.kt index f12928f0..3a690430 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeAscii.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeAscii.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.indexOfNullTerminator -import com.ashampoo.kim.common.slice -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.indexOfNullTerminator +import de.stefan_oltmann.kim.common.slice +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * 8-bit byte that contains a 7-bit ASCII code; diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeByte.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeByte.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeByte.kt index 8bb2da0c..5e7a4797 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeByte.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeByte.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * 8-bit unsigned integer. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeDouble.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeDouble.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeDouble.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeDouble.kt index 093733e5..a6c357ec 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeDouble.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeDouble.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toDoubles -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toDoubles +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * Double precision (8-byte) IEEE format. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeFloat.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeFloat.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeFloat.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeFloat.kt index 8d3e9062..b6d63e02 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeFloat.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeFloat.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toFloats -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toFloats +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * Single precision (4-byte) IEEE format. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeIfd.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeIfd.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeIfd.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeIfd.kt index 89fce83b..16106e9c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeIfd.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeIfd.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toInts -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toInts +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants public data object FieldTypeIfd : FieldType { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeLong.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeLong.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeLong.kt index 9e26b422..09db4944 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeLong.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeLong.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toInts -import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toInts +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX /** * 32-bit (4-byte) unsigned integer. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeRational.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeRational.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeRational.kt index 864e3d88..5bab070c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeRational.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeRational.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.RationalNumbers -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toRationals -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.RationalNumbers +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toRationals +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * Two LONGs: the first represents the numerator of a diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSByte.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSByte.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSByte.kt index cdc86d6b..f4b87204 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSByte.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSByte.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * An 8-bit signed (twos-complement) integer. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSLong.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSLong.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSLong.kt index a1cda7ea..18d7e699 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSLong.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSLong.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toInts -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toInts +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * A 32-bit (4-byte) signed (twos-complement) integer. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSRational.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSRational.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSRational.kt index bf8234fc..f2b336e3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSRational.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSRational.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.RationalNumbers -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toRationals -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.RationalNumbers +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toRationals +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * Two SLONG’s: the first represents the numerator of a diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSShort.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSShort.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSShort.kt index 8be4d19f..b319656b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSShort.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSShort.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toShorts -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toShorts +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * A 16-bit (2-byte) signed (twos-complement) integer. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeShort.kt similarity index 80% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeShort.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeShort.kt index 1e8c6af5..19c21c00 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeShort.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeShort.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.common.toShorts -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.common.toShorts +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * 16-bit (2-byte) unsigned integer. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeUndefined.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeUndefined.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeUndefined.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeUndefined.kt index 6d242192..a23d6ee7 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeUndefined.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeUndefined.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.fieldtype +package de.stefan_oltmann.kim.format.tiff.fieldtype -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants /** * An 8-bit byte that may contain anything, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoKey.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoKey.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoKey.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoKey.kt index a8526758..648c7596 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoKey.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoKey.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.geotiff +package de.stefan_oltmann.kim.format.tiff.geotiff import kotlin.jvm.JvmStatic diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffDirectory.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffDirectory.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffDirectory.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffDirectory.kt index 2233be28..627a6852 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffDirectory.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffDirectory.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.geotiff +package de.stefan_oltmann.kim.format.tiff.geotiff -import com.ashampoo.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.ImageReadException /** * See http://geotiff.maptools.org/spec/geotiff2.4.html diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffGeographicType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffGeographicType.kt similarity index 99% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffGeographicType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffGeographicType.kt index 764c61e2..edc0ebd5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffGeographicType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffGeographicType.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.geotiff +package de.stefan_oltmann.kim.format.tiff.geotiff import kotlin.jvm.JvmStatic diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffModelType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffModelType.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffModelType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffModelType.kt index 6fb7f4f0..5f8447a0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffModelType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffModelType.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.geotiff +package de.stefan_oltmann.kim.format.tiff.geotiff import kotlin.jvm.JvmStatic diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffRasterType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffRasterType.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffRasterType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffRasterType.kt index dc6b445d..60254945 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffRasterType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffRasterType.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.geotiff +package de.stefan_oltmann.kim.format.tiff.geotiff import kotlin.jvm.JvmStatic diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfo.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfo.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfo.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfo.kt index 69dad563..f82319ab 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfo.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfo.kt @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.common.HEX_RADIX -import com.ashampoo.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldType +import de.stefan_oltmann.kim.common.HEX_RADIX +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType public abstract class TagInfo( public val tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoAscii.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoAscii.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoAscii.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoAscii.kt index 6b499823..16227cf1 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoAscii.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoAscii.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeAscii +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeAscii public class TagInfoAscii( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoByte.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoByte.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoByte.kt index 45d21ed7..de2d8de4 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoByte.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoByte.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte public open class TagInfoByte : TagInfo { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoBytes.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoBytes.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoBytes.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoBytes.kt index 01e8b312..2451a05a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoBytes.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoBytes.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte public open class TagInfoBytes : TagInfo { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDouble.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDouble.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDouble.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDouble.kt index 0287dbfd..b2205295 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDouble.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDouble.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeDouble +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeDouble public class TagInfoDouble( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDoubles.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDoubles.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDoubles.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDoubles.kt index de81f1d3..689fbf88 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDoubles.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDoubles.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeDouble +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeDouble public class TagInfoDoubles( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloat.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloat.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloat.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloat.kt index e6048a0c..9ed7635c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloat.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloat.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeFloat +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeFloat public class TagInfoFloat( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloats.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloats.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloats.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloats.kt index 5667beb7..0672e9a7 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloats.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloats.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeFloat +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeFloat public class TagInfoFloats( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoGpsText.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoGpsText.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoGpsText.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoGpsText.kt index a2461096..662bdf1e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoGpsText.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoGpsText.kt @@ -14,19 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.decodeLatin1BytesToString -import com.ashampoo.kim.common.encodeToLatin1Bytes -import com.ashampoo.kim.common.isEquals -import com.ashampoo.kim.common.slice -import com.ashampoo.kim.format.tiff.TiffField -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeAscii -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeUndefined +package de.stefan_oltmann.kim.format.tiff.taginfo + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.decodeLatin1BytesToString +import de.stefan_oltmann.kim.common.encodeToLatin1Bytes +import de.stefan_oltmann.kim.common.isEquals +import de.stefan_oltmann.kim.common.slice +import de.stefan_oltmann.kim.format.tiff.TiffField +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeAscii +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeUndefined /** * Used by some GPS tags and the EXIF user comment tag, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLong.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLong.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLong.kt index 96f105d2..efa665f5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLong.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLong.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong public class TagInfoLong : TagInfo { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLongs.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLongs.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLongs.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLongs.kt index 1128ff4e..2b8c1570 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLongs.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLongs.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong public class TagInfoLongs : TagInfo { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRational.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRational.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRational.kt index 3a25e9ae..60d7ed2d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRational.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRational.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeRational +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeRational public class TagInfoRational( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRationals.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRationals.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRationals.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRationals.kt index afe95d89..78f3f6fd 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRationals.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRationals.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeRational +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeRational public class TagInfoRationals( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSByte.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSByte.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSByte.kt index b4b4f4c2..79f4511a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSByte.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSByte.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSByte +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSByte public class TagInfoSByte( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSBytes.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSBytes.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSBytes.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSBytes.kt index cd8e6645..6ddcdaa6 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSBytes.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSBytes.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSByte +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSByte public class TagInfoSBytes( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLong.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLong.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLong.kt index 18f5b335..6b1c5663 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLong.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLong.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSLong +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSLong public class TagInfoSLong( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLongs.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLongs.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLongs.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLongs.kt index e2147dd8..38ad90e0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLongs.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLongs.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSLong +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSLong public class TagInfoSLongs( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRational.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRational.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRational.kt index 59043f18..cad47f7e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRational.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRational.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSRational +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSRational public class TagInfoSRational( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRationals.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRationals.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRationals.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRationals.kt index e0df0f08..99a391f2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRationals.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRationals.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSRational +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSRational public class TagInfoSRationals( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShort.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShort.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShort.kt index 2074079d..f5fb66c0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShort.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShort.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort public class TagInfoSShort( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShorts.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShorts.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShorts.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShorts.kt index 5732f460..dcea3f2a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShorts.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShorts.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort public class TagInfoSShorts( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShort.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShort.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShort.kt index 0b6f94b7..dcd7148c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShort.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShort.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort public class TagInfoShort( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShorts.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShorts.kt similarity index 82% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShorts.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShorts.kt index ee03f40b..03ef6ac7 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShorts.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShorts.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort public class TagInfoShorts( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefined.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefined.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefined.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefined.kt index 898ab6a6..560a9015 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefined.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefined.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeUndefined +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeUndefined public class TagInfoUndefined( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefineds.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefineds.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefineds.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefineds.kt index 733a0a40..772a95a3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefineds.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefineds.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.taginfo +package de.stefan_oltmann.kim.format.tiff.taginfo -import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeUndefined +import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeUndefined public class TagInfoUndefineds( tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/RewritableSpaceRange.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/RewritableSpaceRange.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/RewritableSpaceRange.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/RewritableSpaceRange.kt index 0ff7d16e..d69d693a 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/RewritableSpaceRange.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/RewritableSpaceRange.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write +package de.stefan_oltmann.kim.format.tiff.write /** * Represents a marker for space in an EXIF that we can safely diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItem.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItem.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItem.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItem.kt index 924ba2a2..ff872e25 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItem.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItem.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write +package de.stefan_oltmann.kim.format.tiff.write /** * This class combines an Directory like the GPS directory with it's offset value. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItems.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItems.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItems.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItems.kt index 6b043690..fdd59fe5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItems.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItems.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write +package de.stefan_oltmann.kim.format.tiff.write -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong internal class TiffOffsetItems(val byteOrder: ByteOrder) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputDirectory.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputDirectory.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputDirectory.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputDirectory.kt index 1a0bd537..25c293a3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputDirectory.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputDirectory.kt @@ -14,55 +14,55 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.RationalNumber -import com.ashampoo.kim.common.RationalNumbers -import com.ashampoo.kim.common.toBytes -import com.ashampoo.kim.format.tiff.TiffDirectory.Companion.description -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_FOOTER_LENGTH -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_HEADER_LENGTH -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeAscii -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeDouble -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeFloat -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeRational -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSByte -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSLong -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSRational -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSShort -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii -import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte -import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes -import com.ashampoo.kim.format.tiff.taginfo.TagInfoDouble -import com.ashampoo.kim.format.tiff.taginfo.TagInfoDoubles -import com.ashampoo.kim.format.tiff.taginfo.TagInfoFloat -import com.ashampoo.kim.format.tiff.taginfo.TagInfoFloats -import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational -import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSByte -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSBytes -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSLongs -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSRational -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSRationals -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSShort -import com.ashampoo.kim.format.tiff.taginfo.TagInfoSShorts -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort -import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts -import com.ashampoo.kim.format.tiff.write.TiffOutputItem.Companion.UNDEFINED_VALUE -import com.ashampoo.kim.output.BinaryByteWriter +package de.stefan_oltmann.kim.format.tiff.write + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.RationalNumber +import de.stefan_oltmann.kim.common.RationalNumbers +import de.stefan_oltmann.kim.common.toBytes +import de.stefan_oltmann.kim.format.tiff.TiffDirectory.Companion.description +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_FOOTER_LENGTH +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_HEADER_LENGTH +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeAscii +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeDouble +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeFloat +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeRational +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSByte +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSLong +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSRational +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSShort +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDouble +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDoubles +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoFloat +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoFloats +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSByte +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSBytes +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSLongs +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSRational +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSRationals +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSShort +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSShorts +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputItem.Companion.UNDEFINED_VALUE +import de.stefan_oltmann.kim.output.BinaryByteWriter @Suppress("TooManyFunctions", "MethodOverloading") public class TiffOutputDirectory( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputField.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputField.kt similarity index 83% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputField.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputField.kt index aabba063..75290882 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputField.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputField.kt @@ -14,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.HEX_RADIX -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH -import com.ashampoo.kim.format.tiff.fieldtype.FieldType -import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong -import com.ashampoo.kim.format.tiff.taginfo.TagInfo -import com.ashampoo.kim.output.BinaryByteWriter +package de.stefan_oltmann.kim.format.tiff.write + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.HEX_RADIX +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType +import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong +import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo +import de.stefan_oltmann.kim.output.BinaryByteWriter public class TiffOutputField( public val tag: Int, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputItem.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputItem.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputItem.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputItem.kt index 22a8462f..3708bd05 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputItem.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputItem.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write +package de.stefan_oltmann.kim.format.tiff.write -import com.ashampoo.kim.output.BinaryByteWriter +import de.stefan_oltmann.kim.output.BinaryByteWriter public interface TiffOutputItem { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputSet.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputSet.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputSet.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputSet.kt index de01d563..d8f5492f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputSet.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputSet.kt @@ -14,22 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.GpsUtil.MINUTES_PER_HOUR -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.RationalNumber.Companion.valueOf -import com.ashampoo.kim.common.RationalNumbers -import com.ashampoo.kim.common.toExifDateString -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.GpsTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffConstants.DEFAULT_TIFF_BYTE_ORDER -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.model.GpsCoordinates -import com.ashampoo.kim.model.MetadataUpdate +package de.stefan_oltmann.kim.format.tiff.write + +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.GpsUtil.MINUTES_PER_HOUR +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.RationalNumber.Companion.valueOf +import de.stefan_oltmann.kim.common.RationalNumbers +import de.stefan_oltmann.kim.common.toExifDateString +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.GpsTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.DEFAULT_TIFF_BYTE_ORDER +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.model.GpsCoordinates +import de.stefan_oltmann.kim.model.MetadataUpdate import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDateTime import kotlin.math.abs diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputValue.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputValue.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputValue.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputValue.kt index 004cd344..12f92d16 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputValue.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputValue.kt @@ -14,11 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write +package de.stefan_oltmann.kim.format.tiff.write -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.output.BinaryByteWriter +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.output.BinaryByteWriter public class TiffOutputValue internal constructor( private val description: String, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterBase.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterBase.kt similarity index 94% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterBase.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterBase.kt index 1e91d673..8bd818c0 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterBase.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterBase.kt @@ -14,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.TiffConstants -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_VERSION -import com.ashampoo.kim.output.BinaryByteWriter -import com.ashampoo.kim.output.ByteWriter +package de.stefan_oltmann.kim.format.tiff.write + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_VERSION +import de.stefan_oltmann.kim.output.BinaryByteWriter +import de.stefan_oltmann.kim.output.ByteWriter public abstract class TiffWriterBase( public val byteOrder: ByteOrder diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossless.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossless.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossless.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossless.kt index b614969b..6ee29c26 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossless.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossless.kt @@ -14,18 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write - -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffElement -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE -import com.ashampoo.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter -import com.ashampoo.kim.output.BufferByteWriter -import com.ashampoo.kim.output.ByteWriter +package de.stefan_oltmann.kim.format.tiff.write + +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffElement +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE +import de.stefan_oltmann.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter +import de.stefan_oltmann.kim.output.BufferByteWriter +import de.stefan_oltmann.kim.output.ByteWriter public class TiffWriterLossless( byteOrder: ByteOrder, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossy.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossy.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossy.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossy.kt index 1a8b9d9f..23b10fd3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossy.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossy.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff.write +package de.stefan_oltmann.kim.format.tiff.write -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE -import com.ashampoo.kim.output.BinaryByteWriter -import com.ashampoo.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter -import com.ashampoo.kim.output.ByteWriter +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE +import de.stefan_oltmann.kim.output.BinaryByteWriter +import de.stefan_oltmann.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter +import de.stefan_oltmann.kim.output.ByteWriter import kotlin.jvm.JvmStatic public class TiffWriterLossy( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPChunkType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPChunkType.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPChunkType.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPChunkType.kt index 997cb7ae..1194396e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPChunkType.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPChunkType.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp +package de.stefan_oltmann.kim.format.webp -import com.ashampoo.kim.common.toFourCCTypeString +import de.stefan_oltmann.kim.common.toFourCCTypeString /** * Type of a WebP chunk. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPConstants.kt similarity index 93% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPConstants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPConstants.kt index 1b468286..4ae830ea 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPConstants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPConstants.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp +package de.stefan_oltmann.kim.format.webp -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder public object WebPConstants { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPImageParser.kt similarity index 77% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPImageParser.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPImageParser.kt index 6e2f5187..291b40da 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPImageParser.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPImageParser.kt @@ -13,30 +13,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp - -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.ImageParser -import com.ashampoo.kim.format.webp.WebPConstants.CHUNK_SIZE_LENGTH -import com.ashampoo.kim.format.webp.WebPConstants.RIFF_SIGNATURE -import com.ashampoo.kim.format.webp.WebPConstants.TPYE_LENGTH -import com.ashampoo.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER -import com.ashampoo.kim.format.webp.WebPConstants.WEBP_SIGNATURE -import com.ashampoo.kim.format.webp.chunk.ImageSizeAware -import com.ashampoo.kim.format.webp.chunk.WebPChunk -import com.ashampoo.kim.format.webp.chunk.WebPChunkExif -import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8 -import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8L -import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8X -import com.ashampoo.kim.format.webp.chunk.WebPChunkXmp -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.input.read4BytesAsInt -import com.ashampoo.kim.input.readAndVerifyBytes -import com.ashampoo.kim.input.readBytes -import com.ashampoo.kim.input.skipBytes -import com.ashampoo.kim.model.ImageFormat +package de.stefan_oltmann.kim.format.webp + +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.ImageParser +import de.stefan_oltmann.kim.format.webp.WebPConstants.CHUNK_SIZE_LENGTH +import de.stefan_oltmann.kim.format.webp.WebPConstants.RIFF_SIGNATURE +import de.stefan_oltmann.kim.format.webp.WebPConstants.TPYE_LENGTH +import de.stefan_oltmann.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER +import de.stefan_oltmann.kim.format.webp.WebPConstants.WEBP_SIGNATURE +import de.stefan_oltmann.kim.format.webp.chunk.ImageSizeAware +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunk +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkExif +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8 +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8L +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8X +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkXmp +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.input.read4BytesAsInt +import de.stefan_oltmann.kim.input.readAndVerifyBytes +import de.stefan_oltmann.kim.input.readBytes +import de.stefan_oltmann.kim.input.skipBytes +import de.stefan_oltmann.kim.model.MediaFormat import kotlin.jvm.JvmStatic public object WebPImageParser : ImageParser { @@ -44,7 +44,7 @@ public object WebPImageParser : ImageParser { /* * https://developers.google.com/speed/webp/docs/riff_container */ - override fun parseMetadata(byteReader: ByteReader): ImageMetadata = + override fun parseMetadata(byteReader: ByteReader): MediaMetadata = tryWithImageReadException { val chunks = readChunks( @@ -60,7 +60,7 @@ public object WebPImageParser : ImageParser { @Throws(ImageReadException::class) @JvmStatic - public fun parseMetadataFromChunks(chunks: List): ImageMetadata = + public fun parseMetadataFromChunks(chunks: List): MediaMetadata = tryWithImageReadException { val imageSizeAwareChunk = chunks.filterIsInstance().firstOrNull() @@ -75,8 +75,8 @@ public object WebPImageParser : ImageParser { val exifChunk = chunks.filterIsInstance().firstOrNull() val xmpChunk = chunks.filterIsInstance().firstOrNull() - return@tryWithImageReadException ImageMetadata( - imageFormat = ImageFormat.WEBP, + return@tryWithImageReadException MediaMetadata( + mediaFormat = MediaFormat.WEBP, imageSize = imageSize, exif = exifChunk?.tiffContents, exifBytes = exifChunk?.bytes, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPUpdater.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPUpdater.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPUpdater.kt index 0a2a8bf5..1b0c1a06 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPUpdater.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPUpdater.kt @@ -13,23 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp - -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.common.startsWithNullable -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.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 -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.xmp.XMPMeta -import com.ashampoo.xmp.XMPMetaFactory +package de.stefan_oltmann.kim.format.webp + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.startsWithNullable +import de.stefan_oltmann.kim.common.tryWithImageWriteException +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers +import de.stefan_oltmann.kim.format.MetadataUpdater +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase +import de.stefan_oltmann.kim.format.xmp.XmpWriter +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.xmp.XMPMeta +import de.stefan_oltmann.xmp.XMPMetaFactory internal object WebPUpdater : MetadataUpdater { @@ -93,7 +93,7 @@ internal object WebPUpdater : MetadataUpdater { thumbnailBytes: ByteArray ): ByteArray = tryWithImageWriteException { - if (!bytes.startsWithNullable(ImageFormatMagicNumbers.webP)) + if (!bytes.startsWithNullable(MediaFormatMagicNumbers.webP)) throw ImageWriteException("Provided input bytes are not WebP!") val byteReader = ByteArrayByteReader(bytes) diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriter.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriter.kt index 707b756d..46bb5d4e 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriter.kt @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp - -import com.ashampoo.kim.common.ImageWriteException -import com.ashampoo.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER -import com.ashampoo.kim.format.webp.chunk.ImageSizeAware -import com.ashampoo.kim.format.webp.chunk.WebPChunk -import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8X -import com.ashampoo.kim.input.ByteReader -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.ByteWriter -import com.ashampoo.kim.output.writeInt +package de.stefan_oltmann.kim.format.webp + +import de.stefan_oltmann.kim.common.ImageWriteException +import de.stefan_oltmann.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER +import de.stefan_oltmann.kim.format.webp.chunk.ImageSizeAware +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunk +import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8X +import de.stefan_oltmann.kim.input.ByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.ByteWriter +import de.stefan_oltmann.kim.output.writeInt import kotlin.jvm.JvmStatic public object WebPWriter { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/ImageSizeAware.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/ImageSizeAware.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/ImageSizeAware.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/ImageSizeAware.kt index d41e5d97..0727bdc3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/ImageSizeAware.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/ImageSizeAware.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.model.ImageSize /** * Effectively a marker interface for VP8, VP8L & VP8X. diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunk.kt similarity index 88% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunk.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunk.kt index 1f4fbd59..2ade7a49 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunk.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunk.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.format.webp.WebPChunkType +import de.stefan_oltmann.kim.format.webp.WebPChunkType public open class WebPChunk( public val type: WebPChunkType, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkExif.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkExif.kt similarity index 79% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkExif.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkExif.kt index 5099f83e..2c1ae136 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkExif.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkExif.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.TiffReader -import com.ashampoo.kim.format.webp.WebPChunkType +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.TiffReader +import de.stefan_oltmann.kim.format.webp.WebPChunkType public class WebPChunkExif( bytes: ByteArray diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8.kt similarity index 93% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8.kt index 84612613..7ee9e081 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8.kt @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.webp.WebPChunkType -import com.ashampoo.kim.format.webp.WebPConstants -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.webp.WebPChunkType +import de.stefan_oltmann.kim.format.webp.WebPConstants +import de.stefan_oltmann.kim.model.ImageSize /* * https://developers.google.com/speed/webp/docs/riff_container#simple_file_format_lossy diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8L.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8L.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8L.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8L.kt index 511b5b2d..13fea905 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8L.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8L.kt @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.webp.WebPChunkType -import com.ashampoo.kim.format.webp.WebPConstants -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.webp.WebPChunkType +import de.stefan_oltmann.kim.format.webp.WebPConstants +import de.stefan_oltmann.kim.model.ImageSize /* * https://developers.google.com/speed/webp/docs/riff_container#simple_file_format_lossless diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8X.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8X.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8X.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8X.kt index 67bb19b5..9daf2c8d 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8X.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8X.kt @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.webp.WebPChunkType -import com.ashampoo.kim.format.webp.WebPConstants -import com.ashampoo.kim.format.webp.WebPConstants.VP8X_PAYLOAD_LENGTH -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.webp.WebPChunkType +import de.stefan_oltmann.kim.format.webp.WebPConstants +import de.stefan_oltmann.kim.format.webp.WebPConstants.VP8X_PAYLOAD_LENGTH +import de.stefan_oltmann.kim.model.ImageSize /* * https://developers.google.com/speed/webp/docs/riff_container#extended_file_format diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkXmp.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkXmp.kt similarity index 87% rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkXmp.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkXmp.kt index a8e2a740..51933cba 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkXmp.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkXmp.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.format.webp.WebPChunkType +import de.stefan_oltmann.kim.format.webp.WebPChunkType public class WebPChunkXmp( bytes: ByteArray diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReader.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReader.kt index a5d1040b..2a581025 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReader.kt @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.xmp - -import com.ashampoo.kim.Kim.underUnitTesting -import com.ashampoo.kim.common.GpsUtil -import com.ashampoo.kim.model.GpsCoordinates -import com.ashampoo.kim.model.LocationShown -import com.ashampoo.kim.model.PhotoMetadata -import com.ashampoo.kim.model.PhotoRating -import com.ashampoo.kim.model.TiffOrientation -import com.ashampoo.xmp.XMPException -import com.ashampoo.xmp.XMPMetaFactory +package de.stefan_oltmann.kim.format.xmp + +import de.stefan_oltmann.kim.Kim.underUnitTesting +import de.stefan_oltmann.kim.common.GpsUtil +import de.stefan_oltmann.kim.model.GpsCoordinates +import de.stefan_oltmann.kim.model.LocationShown +import de.stefan_oltmann.kim.model.MetadataSummary +import de.stefan_oltmann.kim.model.ExifRating +import de.stefan_oltmann.kim.model.TiffOrientation +import de.stefan_oltmann.xmp.XMPException +import de.stefan_oltmann.xmp.XMPMetaFactory import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone import kotlinx.datetime.toInstant @@ -43,7 +43,7 @@ public object XmpReader { @Suppress("LoopWithTooManyJumpStatements") @Throws(XMPException::class) @JvmStatic - public fun readMetadata(xmp: String): PhotoMetadata { + public fun readMetadata(xmp: String): MetadataSummary { val xmpMeta = XMPMetaFactory.parseFromString(xmp) @@ -98,10 +98,10 @@ public object XmpReader { } /* - * Compile into PhotoMetadata object + * Compile into MetadataSummary object */ - return PhotoMetadata( + return MetadataSummary( orientation = TiffOrientation.of(xmpMeta.getOrientation()), takenDate = takenDate, gpsCoordinates = gpsCoordinates, @@ -109,13 +109,12 @@ public object XmpReader { title = xmpMeta.getTitle(), description = xmpMeta.getDescription(), flagged = xmpMeta.isFlagged(), - rating = xmpMeta.getRating()?.let { PhotoRating.of(it) }, + rating = xmpMeta.getRating()?.let { ExifRating.of(it) }, keywords = xmpMeta.getKeywords().ifEmpty { xmpMeta.getAcdSeeKeywords() }, faces = xmpMeta.getFaces(), - personsInImage = xmpMeta.getPersonsInImage(), - albums = xmpMeta.getAlbums() + personsInImage = xmpMeta.getPersonsInImage() ) } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpWriter.kt similarity index 89% rename from src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpWriter.kt index 4e898b2f..6d00639f 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpWriter.kt @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.xmp - -import com.ashampoo.kim.Kim.underUnitTesting -import com.ashampoo.kim.common.GpsUtil -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.model.PhotoRating -import com.ashampoo.xmp.XMPException -import com.ashampoo.xmp.XMPLocation -import com.ashampoo.xmp.XMPMeta -import com.ashampoo.xmp.XMPMetaFactory -import com.ashampoo.xmp.options.SerializeOptions +package de.stefan_oltmann.kim.format.xmp + +import de.stefan_oltmann.kim.Kim.underUnitTesting +import de.stefan_oltmann.kim.common.GpsUtil +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.model.ExifRating +import de.stefan_oltmann.xmp.XMPException +import de.stefan_oltmann.xmp.XMPLocation +import de.stefan_oltmann.xmp.XMPMeta +import de.stefan_oltmann.xmp.XMPMetaFactory +import de.stefan_oltmann.xmp.options.SerializeOptions import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDateTime import kotlin.jvm.JvmStatic @@ -148,19 +148,19 @@ public object XmpWriter { * In the case of flagging/picking a photo a rejected * rating will be reset to UNRATED for logical consistency. */ - if (update.flagged && getRating() == PhotoRating.REJECTED.value) - setRating(PhotoRating.UNRATED.value) + if (update.flagged && getRating() == ExifRating.REJECTED.value) + setRating(ExifRating.UNRATED.value) } is MetadataUpdate.Rating -> { - setRating(update.photoRating.value) + setRating(update.exifRating.value) /* * In the case of rejecting a photo a flag/pick marker * will be removed for logical consistency. */ - if (update.photoRating == PhotoRating.REJECTED && isFlagged()) + if (update.exifRating == ExifRating.REJECTED && isFlagged()) setFlagged(false) } @@ -172,9 +172,6 @@ public object XmpWriter { is MetadataUpdate.Persons -> setPersonsInImage(update.personsInImage) - - is MetadataUpdate.Albums -> - setAlbums(update.albums) } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteArrayByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteArrayByteReader.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/input/ByteArrayByteReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteArrayByteReader.kt index a2d8dd23..a1baa562 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteArrayByteReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteArrayByteReader.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input import kotlin.math.min diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReader.kt similarity index 92% rename from src/commonMain/kotlin/com/ashampoo/kim/input/ByteReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReader.kt index 766eb4f1..ff0dd8b5 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReader.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input public interface ByteReader : Closeable { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReaderExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReaderExtensions.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/input/ByteReaderExtensions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReaderExtensions.kt index f0556b77..3189bf4c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReaderExtensions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReaderExtensions.kt @@ -15,13 +15,13 @@ */ @file:Suppress("TooManyFunctions") -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input -import com.ashampoo.kim.common.ByteOrder -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.quadsToByteArray -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.quadsToByteArray +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.output.ByteArrayByteWriter /* * For easier implementation of the [ByteReader] in diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/Closeable.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Closeable.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/input/Closeable.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/Closeable.kt index 29614527..82ba5fa1 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/Closeable.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Closeable.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input public fun interface Closeable { public fun close() diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/Constants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Constants.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/input/Constants.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/Constants.kt index 58b1208d..aa4be1ea 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/Constants.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Constants.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input /** Same as kotlin.io.DEFAULT_BUFFER_SIZE */ internal const val DEFAULT_BUFFER_SIZE: Int = 8 * 1024 diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/DefaultRandomAccessByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/DefaultRandomAccessByteReader.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/input/DefaultRandomAccessByteReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/DefaultRandomAccessByteReader.kt index d593f241..e671e50c 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/DefaultRandomAccessByteReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/DefaultRandomAccessByteReader.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input -import com.ashampoo.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.JpegConstants import kotlin.math.max /** diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/PrePendingByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReader.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/input/PrePendingByteReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReader.kt index fc871911..b2e80aa9 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/PrePendingByteReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReader.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input /** * Prepends the given list of [Byte]s and continues to diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/RandomAccessByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/RandomAccessByteReader.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/input/RandomAccessByteReader.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/RandomAccessByteReader.kt index 6010202d..8089a7b2 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/input/RandomAccessByteReader.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/RandomAccessByteReader.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input /** * Random access to the bytes are required to read TIFF files diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoRating.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ExifRating.kt similarity index 91% rename from src/commonMain/kotlin/com/ashampoo/kim/model/PhotoRating.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/ExifRating.kt index 34999383..b6762139 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoRating.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ExifRating.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model private const val REJECTED_VALUE: Int = -1 private const val UNRATED_VALUE: Int = 0 @@ -36,7 +37,7 @@ private const val FIVE_STARS_STRING: String = "★★★★★" * which is a 5-star-system with 0 for unrated * and -1 for rejected images. */ -public enum class PhotoRating( +public enum class ExifRating( public val value: Int, public val string: String ) { @@ -54,7 +55,7 @@ public enum class PhotoRating( public val validIntRange: IntRange = REJECTED.value..FIVE_STARS.value /* **Note:** Swift problems if parameter value is of type Int? */ - public fun of(value: Int): PhotoRating? = when (value) { + public fun of(value: Int): ExifRating? = when (value) { REJECTED_VALUE -> REJECTED UNRATED_VALUE -> UNRATED ONE_STAR_VALUE -> ONE_STAR @@ -65,7 +66,7 @@ public enum class PhotoRating( else -> null } - public fun of(value: String?): PhotoRating? = when (value) { + public fun of(value: String?): ExifRating? = when (value) { "-1" -> REJECTED "0" -> UNRATED "1" -> ONE_STAR diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/GpsCoordinates.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/GpsCoordinates.kt similarity index 98% rename from src/commonMain/kotlin/com/ashampoo/kim/model/GpsCoordinates.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/GpsCoordinates.kt index 6ab390dd..1067d2fa 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/GpsCoordinates.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/GpsCoordinates.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model import kotlin.math.round diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageSize.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ImageSize.kt similarity index 95% rename from src/commonMain/kotlin/com/ashampoo/kim/model/ImageSize.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/ImageSize.kt index caf07ff7..1a595930 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageSize.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ImageSize.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model import kotlin.math.max diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/LocationShown.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/LocationShown.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/model/LocationShown.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/LocationShown.kt index c901daa8..ce3cc1c3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/LocationShown.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/LocationShown.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model /** * Iptc4xmpExt:LocationShown diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageFormat.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormat.kt similarity index 52% rename from src/commonMain/kotlin/com/ashampoo/kim/model/ImageFormat.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormat.kt index 0aa52c58..34a41dd4 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageFormat.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormat.kt @@ -1,4 +1,6 @@ /* + * Copyright 2026 Ramon Bouckaert + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,40 +15,59 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model -import com.ashampoo.kim.common.startsWith -import com.ashampoo.kim.common.startsWithNullable -import com.ashampoo.kim.common.toSingleNumberHexes -import com.ashampoo.kim.format.ImageFormatMagicNumbers +import de.stefan_oltmann.kim.common.startsWith +import de.stefan_oltmann.kim.common.startsWithNullable +import de.stefan_oltmann.kim.common.toSingleNumberHexes +import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers import kotlin.jvm.JvmStatic -public enum class ImageFormat( +public enum class MediaFormat( + public val type: MediaFormatType, public val mimeType: String, public val uniformTypeIdentifier: String, public val fileNameExtensions: Set ) { - JPEG("image/jpeg", "public.jpeg", setOf("jpg", "jpeg")), - GIF("image/gif", "com.compuserve.gif", setOf("gif")), - PNG("image/png", "public.png", setOf("png")), - WEBP("image/webp", "org.webmproject.webp", setOf("webp")), - TIFF("image/tiff", "public.tiff", setOf("tif", "tiff")), - HEIC("image/heic", "public.heic", setOf("heic")), - AVIF("image/avif", "public.avif", setOf("avif")), - CR2("image/x-canon-cr2", "com.canon.cr2-raw-image", setOf("cr2")), - CR3("image/x-canon-cr3", "com.canon.cr3", setOf("cr3")), - RAF("image/x-fuji-raf", "com.fuji.raw-image", setOf("raf")), - NEF("image/x-nikon-nef", "com.nikon.raw-image", setOf("nef")), - ARW("image/x-sony-arw", "com.sony.raw-image", setOf("arw")), - RW2("image/x-panasonic-rw2", "com.panasonic.raw-image", setOf("rw2")), - ORF("image/x-olympus-orf", "com.olympus.raw-image", setOf("orf")), - DNG("image/x-adobe-dng", "com.adobe.raw-image", setOf("dng")), - JXL("image/jxl", "public.jxl", setOf("jxl")); - + /* Images */ + JPEG(MediaFormatType.IMAGE, "image/jpeg", "public.jpeg", setOf("jpg", "jpeg")), + GIF(MediaFormatType.IMAGE, "image/gif", "com.compuserve.gif", setOf("gif")), + PNG(MediaFormatType.IMAGE, "image/png", "public.png", setOf("png")), + WEBP(MediaFormatType.IMAGE, "image/webp", "org.webmproject.webp", setOf("webp")), + TIFF(MediaFormatType.IMAGE, "image/tiff", "public.tiff", setOf("tif", "tiff")), + HEIC(MediaFormatType.IMAGE, "image/heic", "public.heic", setOf("heic")), + AVIF(MediaFormatType.IMAGE, "image/avif", "public.avif", setOf("avif")), + CR2(MediaFormatType.IMAGE, "image/x-canon-cr2", "com.canon.cr2-raw-image", setOf("cr2")), + CR3(MediaFormatType.IMAGE, "image/x-canon-cr3", "com.canon.cr3", setOf("cr3")), + RAF(MediaFormatType.IMAGE, "image/x-fuji-raf", "com.fuji.raw-image", setOf("raf")), + NEF(MediaFormatType.IMAGE, "image/x-nikon-nef", "com.nikon.raw-image", setOf("nef")), + ARW(MediaFormatType.IMAGE, "image/x-sony-arw", "com.sony.raw-image", setOf("arw")), + RW2(MediaFormatType.IMAGE, "image/x-panasonic-rw2", "com.panasonic.raw-image", setOf("rw2")), + ORF(MediaFormatType.IMAGE, "image/x-olympus-orf", "com.olympus.raw-image", setOf("orf")), + DNG(MediaFormatType.IMAGE, "image/x-adobe-dng", "com.adobe.raw-image", setOf("dng")), + JXL(MediaFormatType.IMAGE, "image/jxl", "public.jxl", setOf("jxl")), + + /* Videos */ + MOV(MediaFormatType.VIDEO, "video/quicktime", "com.apple.quicktime-movie", setOf("mov")), + MP4(MediaFormatType.VIDEO, "video/mp4", "public.mpeg-4", setOf("mp4")), + + /* Documents */ + PDF(MediaFormatType.DOCUMENT, "application/pdf", "com.adobe.pdf", setOf("pdf")); + + /** + * If true, KIM can embedd metadata into this kind of file. + */ public fun isMetadataEmbeddable(): Boolean = this == JPEG || this == PNG || this == WEBP || this == JXL + /** + * If true, this kind of file usually contains a preview image that we can extract. + * Use Kim.extractPreviewImage() API for this. + */ + public fun hasPreview(): Boolean = + this == CR2 || this == CR3 || this == RAF || this == NEF || this == ARW || this == RW2 // || this == ORF + public companion object { /** @@ -55,7 +76,7 @@ public enum class ImageFormat( */ public const val REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION: Int = 16 - private val allImageFormats = ImageFormat.entries + private val allMediaFormats = MediaFormat.entries public val allFileNameExtensions: Set = computeAllFileNameExtensions() @@ -75,7 +96,7 @@ public enum class ImageFormat( val fileNameExtensions = mutableSetOf() - for (fileType in allImageFormats) + for (fileType in allMediaFormats) for (extension in fileType.fileNameExtensions) fileNameExtensions.add(extension) @@ -93,9 +114,9 @@ public enum class ImageFormat( } @JvmStatic - public fun byMimeType(mimeType: String): ImageFormat? { + public fun byMimeType(mimeType: String): MediaFormat? { - for (fileType in allImageFormats) + for (fileType in allMediaFormats) if (mimeType.contentEquals(fileType.mimeType, ignoreCase = true)) return fileType @@ -115,9 +136,9 @@ public enum class ImageFormat( @JvmStatic public fun byUniformTypeIdentifier( uniformTypeIdentifier: String - ): ImageFormat? { + ): MediaFormat? { - for (fileType in allImageFormats) + for (fileType in allMediaFormats) if (uniformTypeIdentifier.contentEquals(fileType.uniformTypeIdentifier, ignoreCase = true)) return fileType @@ -125,9 +146,9 @@ public enum class ImageFormat( } @JvmStatic - public fun byFileNameExtension(fileName: String): ImageFormat? { + public fun byFileNameExtension(fileName: String): MediaFormat? { - for (fileType in allImageFormats) + for (fileType in allMediaFormats) for (extension in fileType.fileNameExtensions) if (fileName.endsWith(".$extension", ignoreCase = true)) return fileType @@ -142,7 +163,7 @@ public enum class ImageFormat( * (for example empty) than the detection returns null. */ @JvmStatic - public fun detect(bytes: ByteArray): ImageFormat? { + public fun detect(bytes: ByteArray): MediaFormat? { /* * If empty or not enough bytes we can't detect the format and will return NULL. @@ -157,37 +178,60 @@ public enum class ImageFormat( * detections in a way that the first checks most likely hit. */ return when { + /* JPG is the most common format. Check this first. */ - bytes.startsWith(ImageFormatMagicNumbers.jpeg) -> JPEG + bytes.startsWith(MediaFormatMagicNumbers.jpeg) -> JPEG + /* Check other common formats. */ - bytes.startsWith(ImageFormatMagicNumbers.png) -> PNG - bytes.startsWithNullable(ImageFormatMagicNumbers.webP) -> WEBP + bytes.startsWith(MediaFormatMagicNumbers.png) -> PNG + bytes.startsWithNullable(MediaFormatMagicNumbers.webP) -> WEBP + /* Canon CR2 et al *must* be checked before TIFF, because they are based on TIFF */ - bytes.startsWith(ImageFormatMagicNumbers.cr2) -> CR2 - bytes.startsWith(ImageFormatMagicNumbers.rw2) -> RW2 - bytes.startsWith(ImageFormatMagicNumbers.orf_iiro) -> ORF - bytes.startsWith(ImageFormatMagicNumbers.orf_mmor) -> ORF - bytes.startsWith(ImageFormatMagicNumbers.orf_iirs) -> ORF - bytes.startsWith(ImageFormatMagicNumbers.raf) -> RAF + bytes.startsWith(MediaFormatMagicNumbers.cr2) -> CR2 + bytes.startsWith(MediaFormatMagicNumbers.rw2) -> RW2 + bytes.startsWith(MediaFormatMagicNumbers.orf_iiro) -> ORF + bytes.startsWith(MediaFormatMagicNumbers.orf_mmor) -> ORF + bytes.startsWith(MediaFormatMagicNumbers.orf_iirs) -> ORF + bytes.startsWith(MediaFormatMagicNumbers.raf) -> RAF + /* Check TIFF after the RAW files. */ - bytes.startsWith(ImageFormatMagicNumbers.tiffLittleEndian) -> TIFF - bytes.startsWith(ImageFormatMagicNumbers.tiffBigEndian) -> TIFF + bytes.startsWith(MediaFormatMagicNumbers.tiffLittleEndian) -> TIFF + bytes.startsWith(MediaFormatMagicNumbers.tiffBigEndian) -> TIFF + /* Check JXL ISOBMFF */ - bytes.startsWith(ImageFormatMagicNumbers.jxl) -> JXL + bytes.startsWith(MediaFormatMagicNumbers.jxl) -> JXL + /* Check HEIC variants */ - bytes.startsWithNullable(ImageFormatMagicNumbers.heic) -> HEIC - bytes.startsWithNullable(ImageFormatMagicNumbers.mif1) -> HEIC - bytes.startsWithNullable(ImageFormatMagicNumbers.msf1) -> HEIC - bytes.startsWithNullable(ImageFormatMagicNumbers.heix) -> HEIC - bytes.startsWithNullable(ImageFormatMagicNumbers.hevc) -> HEIC - bytes.startsWithNullable(ImageFormatMagicNumbers.hevx) -> HEIC + bytes.startsWithNullable(MediaFormatMagicNumbers.heic) -> HEIC + bytes.startsWithNullable(MediaFormatMagicNumbers.mif1) -> HEIC + bytes.startsWithNullable(MediaFormatMagicNumbers.msf1) -> HEIC + bytes.startsWithNullable(MediaFormatMagicNumbers.heix) -> HEIC + bytes.startsWithNullable(MediaFormatMagicNumbers.hevc) -> HEIC + bytes.startsWithNullable(MediaFormatMagicNumbers.hevx) -> HEIC + /* Check AVIF */ - bytes.startsWithNullable(ImageFormatMagicNumbers.avif) -> AVIF + bytes.startsWithNullable(MediaFormatMagicNumbers.avif) -> AVIF + bytes.startsWithNullable(MediaFormatMagicNumbers.avis) -> AVIF /* Check CR3 */ - bytes.startsWithNullable(ImageFormatMagicNumbers.cr3) -> CR3 + bytes.startsWithNullable(MediaFormatMagicNumbers.cr3) -> CR3 + /* Check GIF and other unlikely formats... */ - bytes.startsWith(ImageFormatMagicNumbers.gif87a) -> GIF - bytes.startsWith(ImageFormatMagicNumbers.gif89a) -> GIF + bytes.startsWith(MediaFormatMagicNumbers.gif87a) -> GIF + bytes.startsWith(MediaFormatMagicNumbers.gif89a) -> GIF + + /* Check MP4 video formats */ + bytes.startsWithNullable(MediaFormatMagicNumbers.mp42) -> MP4 + bytes.startsWithNullable(MediaFormatMagicNumbers.mp41) -> MP4 + bytes.startsWithNullable(MediaFormatMagicNumbers.isom) -> MP4 + bytes.startsWithNullable(MediaFormatMagicNumbers.iso2) -> MP4 + bytes.startsWithNullable(MediaFormatMagicNumbers.avc1) -> MP4 + + /* Check QuickTime video format */ + bytes.startsWithNullable(MediaFormatMagicNumbers.qt) -> MOV + + /* Check document formats */ + bytes.startsWith(MediaFormatMagicNumbers.pdf) -> PDF + else -> null } } diff --git a/src/jsTest/kotlin/com/ashampoo/kim/ResourcePath.js.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormatType.kt similarity index 73% rename from src/jsTest/kotlin/com/ashampoo/kim/ResourcePath.js.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormatType.kt index 067606ef..e6a4c919 100644 --- a/src/jsTest/kotlin/com/ashampoo/kim/ResourcePath.js.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormatType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025 Ashampoo GmbH & Co. KG + * Copyright 2026 Stefan Oltmann * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim +package de.stefan_oltmann.kim.model -actual fun getPathForResource(path: String): String = path +/** + * Describes the kind of media format. + */ +public enum class MediaFormatType { + + IMAGE, + VIDEO, + AUDIO, + DOCUMENT +} diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt similarity index 81% rename from src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt index 4df75782..da86fec6 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,18 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model -import com.ashampoo.kim.common.PhotoValueFormatter -import com.ashampoo.xmp.XMPRegionArea +import de.stefan_oltmann.kim.common.KimValueFormatter +import de.stefan_oltmann.xmp.XMPRegionArea /** - * Represents a high-level summary of image metadata extracted from raw ImageMetadata. - * This summary is used by Ashampoo Photo Organizer. + * Represents a high-level summary of image metadata extracted from raw MediaMetadata. */ -public data class PhotoMetadata( +public data class MetadataSummary( - val imageFormat: ImageFormat? = null, + val mediaFormat: MediaFormat? = null, /* Image resolution */ val widthPx: Int? = null, @@ -52,16 +52,13 @@ public data class PhotoMetadata( /* Ratings & Tags */ val flagged: Boolean = false, - val rating: PhotoRating? = null, + val rating: ExifRating? = null, val keywords: Set = emptySet(), /* Persons */ val faces: Map = emptyMap(), val personsInImage: Set = emptySet(), - /* Albums */ - val albums: Set = emptySet(), - /* EXIF Thumbnail (IFD1) */ val thumbnailImageSize: ImageSize? = null, val thumbnailBytes: ByteArray? = null @@ -72,23 +69,23 @@ public data class PhotoMetadata( get() = if (widthPx == null || heightPx == null) 0 else - (widthPx * heightPx).div(PhotoValueFormatter.MEGA_PIXEL_COUNT) + (widthPx * heightPx).div(KimValueFormatter.MEGA_PIXEL_COUNT) val locationDisplay: String? get() = locationShown?.displayString ?: gpsCoordinates?.let { "GPS: " + gpsCoordinates.latLongString } val cameraName: String? - get() = PhotoValueFormatter.createCameraOrLensName(cameraMake, cameraModel) + get() = KimValueFormatter.createCameraOrLensName(cameraMake, cameraModel) val lensName: String? - get() = PhotoValueFormatter.createModifiedLensName( + get() = KimValueFormatter.createModifiedLensName( cameraName = cameraName, - lensName = PhotoValueFormatter.createCameraOrLensName(lensMake, lensModel) + lensName = KimValueFormatter.createCameraOrLensName(lensMake, lensModel) ) val cameraAndLensName: String? - get() = PhotoValueFormatter.createCameraAndLensName( + get() = KimValueFormatter.createCameraAndLensName( cameraName = cameraName, lensName = lensName ) @@ -102,7 +99,7 @@ public data class PhotoMetadata( @Suppress("DataClassContainsFunctions") public fun isEmpty(): Boolean = - this == emptyPhotoMetadata + this == emptySummary /** * Combine the current metadata with the given one, @@ -114,14 +111,14 @@ public data class PhotoMetadata( * If the other metadata is NULL the same object is returned. * This API is provided to chain it. */ - public fun merge(other: PhotoMetadata?): PhotoMetadata { + public fun merge(other: MetadataSummary?): MetadataSummary { if (other == null) return this return this.copy( - imageFormat = imageFormat ?: other.imageFormat, + mediaFormat = mediaFormat ?: other.mediaFormat, /* Image resolution */ widthPx = widthPx ?: other.widthPx, @@ -156,9 +153,6 @@ public data class PhotoMetadata( faces = faces.ifEmpty { other.faces }, personsInImage = personsInImage.ifEmpty { other.personsInImage }, - /* Albums */ - albums = albums.ifEmpty { other.albums }, - /* EXIF Thumbnail (IFD1) */ thumbnailImageSize = thumbnailImageSize ?: other.thumbnailImageSize, thumbnailBytes = thumbnailBytes ?: other.thumbnailBytes @@ -167,6 +161,6 @@ public data class PhotoMetadata( public companion object { - public val emptyPhotoMetadata: PhotoMetadata = PhotoMetadata() + public val emptySummary: MetadataSummary = MetadataSummary() } } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/MetadataUpdate.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataUpdate.kt similarity index 85% rename from src/commonMain/kotlin/com/ashampoo/kim/model/MetadataUpdate.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataUpdate.kt index 0de7effe..fff12b75 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/MetadataUpdate.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataUpdate.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model -import com.ashampoo.xmp.XMPRegionArea +import de.stefan_oltmann.xmp.XMPRegionArea /** * Represents possible updates that can be performed. @@ -40,7 +40,7 @@ public sealed interface MetadataUpdate { * New GPS coordinates or NULL to remove it (if the location is wrong and/or not known) */ public data class GpsCoordinates( - val gpsCoordinates: com.ashampoo.kim.model.GpsCoordinates? + val gpsCoordinates: de.stefan_oltmann.kim.model.GpsCoordinates? ) : MetadataUpdate /** @@ -49,15 +49,15 @@ public sealed interface MetadataUpdate { * This is in the sense of Iptc4xmpExt:LocationShown */ public data class LocationShown( - val locationShown: com.ashampoo.kim.model.LocationShown? + val locationShown: de.stefan_oltmann.kim.model.LocationShown? ) : MetadataUpdate /* * One-shot update GPS coordinates & location */ public data class GpsCoordinatesAndLocationShown( - val gpsCoordinates: com.ashampoo.kim.model.GpsCoordinates?, - val locationShown: com.ashampoo.kim.model.LocationShown? + val gpsCoordinates: de.stefan_oltmann.kim.model.GpsCoordinates?, + val locationShown: de.stefan_oltmann.kim.model.LocationShown? ) : MetadataUpdate /** @@ -92,7 +92,7 @@ public sealed interface MetadataUpdate { * will be removed for logical consistency. */ public data class Rating( - val photoRating: PhotoRating + val exifRating: ExifRating ) : MetadataUpdate /** @@ -118,11 +118,4 @@ public sealed interface MetadataUpdate { val personsInImage: Set ) : MetadataUpdate - /** - * List of new albums to set. An empty list removes all albums. - */ - public data class Albums( - val albums: Set - ) : MetadataUpdate - } diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/TiffOrientation.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/TiffOrientation.kt similarity index 99% rename from src/commonMain/kotlin/com/ashampoo/kim/model/TiffOrientation.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/TiffOrientation.kt index d4a911f9..887332a8 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/model/TiffOrientation.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/TiffOrientation.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model @Suppress("MagicNumber") public enum class TiffOrientation( diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/BigEndianBinaryByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BigEndianBinaryByteWriter.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/output/BigEndianBinaryByteWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/BigEndianBinaryByteWriter.kt index df160acc..020af559 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/BigEndianBinaryByteWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BigEndianBinaryByteWriter.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output @Suppress("MagicNumber") internal class BigEndianBinaryByteWriter(byteWriter: ByteWriter) : BinaryByteWriter(byteWriter) { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/BinaryByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BinaryByteWriter.kt similarity index 93% rename from src/commonMain/kotlin/com/ashampoo/kim/output/BinaryByteWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/BinaryByteWriter.kt index f5e50497..ed0862fe 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/BinaryByteWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BinaryByteWriter.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder public abstract class BinaryByteWriter( public val byteWriter: ByteWriter diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/BufferByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BufferByteWriter.kt similarity index 93% rename from src/commonMain/kotlin/com/ashampoo/kim/output/BufferByteWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/BufferByteWriter.kt index 231dd938..512d7055 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/BufferByteWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BufferByteWriter.kt @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output -import com.ashampoo.kim.common.ImageWriteException +import de.stefan_oltmann.kim.common.ImageWriteException internal class BufferByteWriter( private val buffer: ByteArray, diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteArrayByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteArrayByteWriter.kt similarity index 92% rename from src/commonMain/kotlin/com/ashampoo/kim/output/ByteArrayByteWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteArrayByteWriter.kt index 210cafcb..7e0ba75b 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteArrayByteWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteArrayByteWriter.kt @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output -import com.ashampoo.kim.input.Closeable -import com.ashampoo.kim.input.DEFAULT_BUFFER_SIZE +import de.stefan_oltmann.kim.input.Closeable +import de.stefan_oltmann.kim.input.DEFAULT_BUFFER_SIZE public class ByteArrayByteWriter : ByteWriter, Closeable { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriter.kt similarity index 90% rename from src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriter.kt index 8d53292f..371519f3 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriter.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output -import com.ashampoo.kim.input.Closeable +import de.stefan_oltmann.kim.input.Closeable public interface ByteWriter : Closeable { diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriterExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriterExtensions.kt similarity index 96% rename from src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriterExtensions.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriterExtensions.kt index 98d17c29..33cd2983 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriterExtensions.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriterExtensions.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output -import com.ashampoo.kim.common.ByteOrder +import de.stefan_oltmann.kim.common.ByteOrder /* * For easier implementation of the [ByteWriter] in diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/LittleEndianBinaryByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/LittleEndianBinaryByteWriter.kt similarity index 97% rename from src/commonMain/kotlin/com/ashampoo/kim/output/LittleEndianBinaryByteWriter.kt rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/LittleEndianBinaryByteWriter.kt index 8c671f09..9d2670de 100644 --- a/src/commonMain/kotlin/com/ashampoo/kim/output/LittleEndianBinaryByteWriter.kt +++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/LittleEndianBinaryByteWriter.kt @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output @Suppress("MagicNumber") internal class LittleEndianBinaryByteWriter(byteWriter: ByteWriter) : BinaryByteWriter(byteWriter) { diff --git a/src/commonTest/kotlin/com/ashampoo/kim/ResourcePath.kt b/src/commonTest/kotlin/com/ashampoo/kim/ResourcePath.kt deleted file mode 100644 index 63ff5691..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/ResourcePath.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -expect fun getPathForResource(path: String): String diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/bmff/BoxReaderTest.kt b/src/commonTest/kotlin/com/ashampoo/kim/format/bmff/BoxReaderTest.kt deleted file mode 100644 index 4f9238ab..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/bmff/BoxReaderTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim.format.bmff - -import com.ashampoo.kim.format.bmff.box.BoxContainer -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData -import kotlin.test.Test -import kotlin.test.assertEquals - -class BoxReaderTest { - - @Test - fun testExtractMetadataBytes() { - - val bytes = KimTestData.getBytesOf(KimTestData.HEIC_TEST_IMAGE_INDEX) - - val byteReader = ByteArrayByteReader(bytes) - - val boxes = BoxReader.readBoxes( - byteReader = byteReader, - stopAfterMetadataRead = false - ) - - val allBoxes = BoxContainer.findAllBoxesRecursive(boxes) - - assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset) - assertEquals(36, allBoxes.first { it.type == BoxType.META }.offset) - assertEquals(48, allBoxes.first { it.type == BoxType.HDLR }.offset) - assertEquals(118, allBoxes.first { it.type == BoxType.PITM }.offset) - assertEquals(132, allBoxes.first { it.type == BoxType.IINF }.offset) - assertEquals(144, allBoxes.first { it.type == BoxType.INFE }.offset) - assertEquals(2572, allBoxes.first { it.type == BoxType.ILOC }.offset) - assertEquals(3404, allBoxes.first { it.type == BoxType.MDAT }.offset) - } -} diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_description.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_description.jxl.txt deleted file mode 100644 index 5b58f8f2..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_description.jxl.txt +++ /dev/null @@ -1,290 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010e ImageDescription = Äußerst süße Vögel fliegen durch die Lüfte. -0000000022 0x010f Make = SONY -0000000034 0x0110 Model = DSC-RX100 -0000000046 0x0112 Orientation = 1 -0000000058 0x011a XResolution = 240/1 (240.0) -0000000070 0x011b YResolution = 240/1 (240.0) -0000000082 0x0128 ResolutionUnit = 2 -0000000094 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000106 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000118 0x8769 ExifOffset = 286 - ----- Directory ExifIFD @ 286 ---- -0000000288 0x829a ExposureTime = 1/250 (0.004) -0000000300 0x829d FNumber = 8/1 (8.0) -0000000312 0x8822 ExposureProgram = 1 -0000000324 0x8827 ISO = 125 -0000000336 0x8830 SensitivityType = 2 -0000000348 0x8832 RecommendedExposureIndex = 125 -0000000360 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000372 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000384 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000396 0x9010 OffsetTime = +02:00 -0000000408 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000420 0x9202 ApertureValue = 6/1 (6.0) -0000000432 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000444 0x9204 ExposureCompensation = 0/10 (0.0) -0000000456 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000468 0x9207 MeteringMode = 3 -0000000480 0x9208 LightSource = 0 -0000000492 0x9209 Flash = 15 -0000000504 0x920a FocalLength = 1040/100 (10.4) -0000000516 0xa001 ColorSpace = 1 -0000000528 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000540 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000552 0xa210 FocalPlaneResolutionUnit = 3 -0000000564 0xa300 FileSource = 3 -0000000576 0xa301 SceneType = 1 -0000000588 0xa401 CustomRendered = 0 -0000000600 0xa402 ExposureMode = 1 -0000000612 0xa403 WhiteBalance = 0 -0000000624 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000636 0xa405 FocalLengthIn35mmFormat = 28 -0000000648 0xa406 SceneCaptureType = 0 -0000000660 0xa408 Contrast = 0 -0000000672 0xa409 Saturation = 0 -0000000684 0xa40a Sharpness = 0 -0000000696 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000708 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 910 ---- -0000000912 0x0103 Compression = 6 -0000000924 0x011a XResolution = 72/1 (72.0) -0000000936 0x011b YResolution = 72/1 (72.0) -0000000948 0x0128 ResolutionUnit = 2 -0000000960 0x0201 JpgFromRawStart = 1004 -0000000972 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - Äußerst süße Vögel fliegen durch die Lüfte. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl deleted file mode 100644 index b9d3a885..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl.txt deleted file mode 100644 index 69b76c27..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl.txt +++ /dev/null @@ -1,291 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x011a XResolution = 240/1 (240.0) -0000000046 0x011b YResolution = 240/1 (240.0) -0000000058 0x0128 ResolutionUnit = 2 -0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000094 0x8769 ExifOffset = 212 - ----- Directory ExifIFD @ 212 ---- -0000000214 0x829a ExposureTime = 1/250 (0.004) -0000000226 0x829d FNumber = 8/1 (8.0) -0000000238 0x8822 ExposureProgram = 1 -0000000250 0x8827 ISO = 125 -0000000262 0x8830 SensitivityType = 2 -0000000274 0x8832 RecommendedExposureIndex = 125 -0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000322 0x9010 OffsetTime = +02:00 -0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000346 0x9202 ApertureValue = 6/1 (6.0) -0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000370 0x9204 ExposureCompensation = 0/10 (0.0) -0000000382 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000394 0x9207 MeteringMode = 3 -0000000406 0x9208 LightSource = 0 -0000000418 0x9209 Flash = 15 -0000000430 0x920a FocalLength = 1040/100 (10.4) -0000000442 0xa001 ColorSpace = 1 -0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000478 0xa210 FocalPlaneResolutionUnit = 3 -0000000490 0xa300 FileSource = 3 -0000000502 0xa301 SceneType = 1 -0000000514 0xa401 CustomRendered = 0 -0000000526 0xa402 ExposureMode = 1 -0000000538 0xa403 WhiteBalance = 0 -0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000562 0xa405 FocalLengthIn35mmFormat = 28 -0000000574 0xa406 SceneCaptureType = 0 -0000000586 0xa408 Contrast = 0 -0000000598 0xa409 Saturation = 0 -0000000610 0xa40a Sharpness = 0 -0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000634 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 836 ---- -0000000838 0x0103 Compression = 6 -0000000850 0x011a XResolution = 72/1 (72.0) -0000000862 0x011b YResolution = 72/1 (72.0) -0000000874 0x0128 ResolutionUnit = 2 -0000000886 0x0201 JpgFromRawStart = 930 -0000000898 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl deleted file mode 100644 index c1d62432..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl.txt deleted file mode 100644 index 7e06ac22..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl.txt +++ /dev/null @@ -1,18 +0,0 @@ -File format : JXL -Resolution : null ----- XMP ---- - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates.jxl deleted file mode 100644 index b77cbe27..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl deleted file mode 100644 index 87451330..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl.txt deleted file mode 100644 index da268bbb..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl.txt +++ /dev/null @@ -1,55 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Big-endian (Motorola, MM) ----- Directory IFD0 @ 8 ---- -0000000010 0x8769 ExifOffset = 40 -0000000022 0x8825 GPSInfo = 48 - ----- Directory ExifIFD @ 40 ---- - ----- Directory GPS @ 48 ---- -0000000050 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] -0000000062 0x0001 GPSLatitudeRef = N -0000000074 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)] -0000000086 0x0003 GPSLongitudeRef = E -0000000098 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)] - ----- XMP ---- - - - - - - - - - - - //CRASH - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.jxl deleted file mode 100644 index 7749c5aa..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.no_metadata.jxl.txt deleted file mode 100644 index 240572b7..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.no_metadata.jxl.txt +++ /dev/null @@ -1,19 +0,0 @@ -File format : JXL -Resolution : null ----- XMP ---- - - - - - - - hello - test - Äußerst öffentlich - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.no_metadata.jxl deleted file mode 100644 index 7ae84cbf..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_persons.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_persons.no_metadata.jxl.txt deleted file mode 100644 index 174ce279..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_persons.no_metadata.jxl.txt +++ /dev/null @@ -1,18 +0,0 @@ -File format : JXL -Resolution : null ----- XMP ---- - - - - - - - Dora - Swiper - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl deleted file mode 100644 index dd5d3365..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl.txt deleted file mode 100644 index 057374bb..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl.txt +++ /dev/null @@ -1,283 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x011a XResolution = 240/1 (240.0) -0000000046 0x011b YResolution = 240/1 (240.0) -0000000058 0x0128 ResolutionUnit = 2 -0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000094 0x8769 ExifOffset = 212 - ----- Directory ExifIFD @ 212 ---- -0000000214 0x829a ExposureTime = 1/250 (0.004) -0000000226 0x829d FNumber = 8/1 (8.0) -0000000238 0x8822 ExposureProgram = 1 -0000000250 0x8827 ISO = 125 -0000000262 0x8830 SensitivityType = 2 -0000000274 0x8832 RecommendedExposureIndex = 125 -0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000322 0x9010 OffsetTime = +02:00 -0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000346 0x9202 ApertureValue = 6/1 (6.0) -0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000370 0x9204 ExposureCompensation = 0/10 (0.0) -0000000382 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000394 0x9207 MeteringMode = 3 -0000000406 0x9208 LightSource = 0 -0000000418 0x9209 Flash = 15 -0000000430 0x920a FocalLength = 1040/100 (10.4) -0000000442 0xa001 ColorSpace = 1 -0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000478 0xa210 FocalPlaneResolutionUnit = 3 -0000000490 0xa300 FileSource = 3 -0000000502 0xa301 SceneType = 1 -0000000514 0xa401 CustomRendered = 0 -0000000526 0xa402 ExposureMode = 1 -0000000538 0xa403 WhiteBalance = 0 -0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000562 0xa405 FocalLengthIn35mmFormat = 28 -0000000574 0xa406 SceneCaptureType = 0 -0000000586 0xa408 Contrast = 0 -0000000598 0xa409 Saturation = 0 -0000000610 0xa40a Sharpness = 0 -0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000634 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 836 ---- -0000000838 0x0103 Compression = 6 -0000000850 0x011a XResolution = 72/1 (72.0) -0000000862 0x011b YResolution = 72/1 (72.0) -0000000874 0x0128 ResolutionUnit = 2 -0000000886 0x0201 JpgFromRawStart = 930 -0000000898 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.no_metadata.jxl.txt deleted file mode 100644 index c42f0d0b..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.no_metadata.jxl.txt +++ /dev/null @@ -1,12 +0,0 @@ -File format : JXL -Resolution : null ----- XMP ---- - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl deleted file mode 100644 index ba90b3ec..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl.txt deleted file mode 100644 index 167671b8..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl.txt +++ /dev/null @@ -1,286 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x0112 Orientation = 1 -0000000046 0x011a XResolution = 240/1 (240.0) -0000000058 0x011b YResolution = 240/1 (240.0) -0000000070 0x0128 ResolutionUnit = 2 -0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000106 0x8769 ExifOffset = 224 - ----- Directory ExifIFD @ 224 ---- -0000000226 0x829a ExposureTime = 1/250 (0.004) -0000000238 0x829d FNumber = 8/1 (8.0) -0000000250 0x8822 ExposureProgram = 1 -0000000262 0x8827 ISO = 125 -0000000274 0x8830 SensitivityType = 2 -0000000286 0x8832 RecommendedExposureIndex = 125 -0000000298 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000310 0x9003 DateTimeOriginal = 2023:07:12 14:48:45 -0000000322 0x9004 DateTimeDigitized = 2023:07:12 14:48:45 -0000000334 0x9010 OffsetTime = +02:00 -0000000346 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000358 0x9202 ApertureValue = 6/1 (6.0) -0000000370 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000382 0x9204 ExposureCompensation = 0/10 (0.0) -0000000394 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000406 0x9207 MeteringMode = 3 -0000000418 0x9208 LightSource = 0 -0000000430 0x9209 Flash = 15 -0000000442 0x920a FocalLength = 1040/100 (10.4) -0000000454 0xa001 ColorSpace = 1 -0000000466 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000478 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000490 0xa210 FocalPlaneResolutionUnit = 3 -0000000502 0xa300 FileSource = 3 -0000000514 0xa301 SceneType = 1 -0000000526 0xa401 CustomRendered = 0 -0000000538 0xa402 ExposureMode = 1 -0000000550 0xa403 WhiteBalance = 0 -0000000562 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000574 0xa405 FocalLengthIn35mmFormat = 28 -0000000586 0xa406 SceneCaptureType = 0 -0000000598 0xa408 Contrast = 0 -0000000610 0xa409 Saturation = 0 -0000000622 0xa40a Sharpness = 0 -0000000634 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000646 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 848 ---- -0000000850 0x0103 Compression = 6 -0000000862 0x011a XResolution = 72/1 (72.0) -0000000874 0x011b YResolution = 72/1 (72.0) -0000000886 0x0128 ResolutionUnit = 2 -0000000898 0x0201 JpgFromRawStart = 942 -0000000910 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl deleted file mode 100644 index 382a2f72..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl.txt deleted file mode 100644 index 5aa0245c..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl.txt +++ /dev/null @@ -1,22 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Big-endian (Motorola, MM) ----- Directory IFD0 @ 8 ---- -0000000010 0x8769 ExifOffset = 28 - ----- Directory ExifIFD @ 28 ---- -0000000030 0x9003 DateTimeOriginal = 2023:07:12 14:48:45 -0000000042 0x9004 DateTimeDigitized = 2023:07:12 14:48:45 - ----- XMP ---- - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl deleted file mode 100644 index 2476f7fc..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl.txt deleted file mode 100644 index ecfc3689..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl.txt +++ /dev/null @@ -1,288 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x011a XResolution = 240/1 (240.0) -0000000046 0x011b YResolution = 240/1 (240.0) -0000000058 0x0128 ResolutionUnit = 2 -0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000094 0x8769 ExifOffset = 212 - ----- Directory ExifIFD @ 212 ---- -0000000214 0x829a ExposureTime = 1/250 (0.004) -0000000226 0x829d FNumber = 8/1 (8.0) -0000000238 0x8822 ExposureProgram = 1 -0000000250 0x8827 ISO = 125 -0000000262 0x8830 SensitivityType = 2 -0000000274 0x8832 RecommendedExposureIndex = 125 -0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000322 0x9010 OffsetTime = +02:00 -0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000346 0x9202 ApertureValue = 6/1 (6.0) -0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000370 0x9204 ExposureCompensation = 0/10 (0.0) -0000000382 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000394 0x9207 MeteringMode = 3 -0000000406 0x9208 LightSource = 0 -0000000418 0x9209 Flash = 15 -0000000430 0x920a FocalLength = 1040/100 (10.4) -0000000442 0xa001 ColorSpace = 1 -0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000478 0xa210 FocalPlaneResolutionUnit = 3 -0000000490 0xa300 FileSource = 3 -0000000502 0xa301 SceneType = 1 -0000000514 0xa401 CustomRendered = 0 -0000000526 0xa402 ExposureMode = 1 -0000000538 0xa403 WhiteBalance = 0 -0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000562 0xa405 FocalLengthIn35mmFormat = 28 -0000000574 0xa406 SceneCaptureType = 0 -0000000586 0xa408 Contrast = 0 -0000000598 0xa409 Saturation = 0 -0000000610 0xa40a Sharpness = 0 -0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000634 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 836 ---- -0000000838 0x0103 Compression = 6 -0000000850 0x011a XResolution = 72/1 (72.0) -0000000862 0x011b YResolution = 72/1 (72.0) -0000000874 0x0128 ResolutionUnit = 2 -0000000886 0x0201 JpgFromRawStart = 930 -0000000898 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - Süße Vögelchen - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl deleted file mode 100644 index c27f695f..00000000 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl.txt deleted file mode 100644 index c5ca0f85..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl.txt +++ /dev/null @@ -1,21 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Big-endian (Motorola, MM) ----- Directory IFD0 @ 8 ---- -0000000010 0x0112 Orientation = 6 -0000000022 0x8769 ExifOffset = 40 - ----- Directory ExifIFD @ 40 ---- - ----- XMP ---- - - - - - - - \ No newline at end of file diff --git a/src/commonTest/kotlin/com/ashampoo/kim/model/ImageFormatTest.kt b/src/commonTest/kotlin/com/ashampoo/kim/model/ImageFormatTest.kt deleted file mode 100644 index 55f52ba6..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/model/ImageFormatTest.kt +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim.model - -import com.ashampoo.kim.testdata.KimTestData -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNull - -class ImageFormatTest { - - @Test - fun testDetect() { - - for (index in 1..KimTestData.TEST_PHOTO_COUNT) { - - val expectedFileType = when { - index <= KimTestData.HIGHEST_JPEG_INDEX -> ImageFormat.JPEG - index == KimTestData.GIF_TEST_IMAGE_INDEX -> ImageFormat.GIF - index == KimTestData.WEBP_TEST_IMAGE_INDEX -> ImageFormat.WEBP - index == KimTestData.PNG_TEST_IMAGE_INDEX -> ImageFormat.PNG - index == KimTestData.TIFF_NONE_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.TIFF_ZIP_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.TIFF_LZW_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.PNG_APPLE_PREVIEW_TEST_IMAGE_INDEX -> ImageFormat.PNG - index == KimTestData.PNG_GIMP_TEST_IMAGE_INDEX -> ImageFormat.PNG - index == KimTestData.CR2_TEST_IMAGE_INDEX -> ImageFormat.CR2 - index == KimTestData.RAF_TEST_IMAGE_INDEX -> ImageFormat.RAF - index == KimTestData.RW2_TEST_IMAGE_INDEX -> ImageFormat.RW2 - index == KimTestData.ORF_TEST_IMAGE_INDEX -> ImageFormat.ORF - /* NEF, ARW and DNG do not have unique magic bytes and recognized as TIFF. */ - index == KimTestData.NEF_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.ARW_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.DNG_CR2_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.DNG_RAF_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.DNG_NEF_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.DNG_ARW_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.DNG_RW2_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.DNG_ORF_TEST_IMAGE_INDEX -> ImageFormat.TIFF - index == KimTestData.HEIC_TEST_IMAGE_INDEX -> ImageFormat.HEIC - index == KimTestData.HIF_TEST_IMAGE_INDEX -> ImageFormat.HEIC - index == KimTestData.HEIC_TEST_IMAGE_WITH_XMP_INDEX -> ImageFormat.HEIC - index == KimTestData.AVIF_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> ImageFormat.AVIF - index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> ImageFormat.HEIC - index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_APPLE_INDEX -> ImageFormat.HEIC - index == KimTestData.HEIC_TEST_IMAGE_FROM_SAMSUNG_INDEX -> ImageFormat.HEIC - index == KimTestData.JXL_CONTAINER_DARKTABLE_INDEX -> ImageFormat.JXL - index == KimTestData.JXL_CONTAINER_UNCOMPRESSED_INDEX -> ImageFormat.JXL - index == KimTestData.JXL_CONTAINER_COMPRESSED_INDEX -> ImageFormat.JXL - index == KimTestData.GEOTIFF_PIXEL_SCALING_INDEX -> ImageFormat.TIFF - index == KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX -> ImageFormat.TIFF - index == KimTestData.CR3_TEST_IMAGE_INDEX -> ImageFormat.CR3 - else -> null - } - - val bytes = KimTestData.getBytesOf(index) - - val actualFileType = ImageFormat.detect(bytes) - - assertEquals(expectedFileType, actualFileType, "Photo $index has a different type.") - } - } - - @Test - fun testByMimeType() { - - assertNull(ImageFormat.byMimeType("invalid")) - - assertEquals( - expected = ImageFormat.JPEG, - actual = ImageFormat.byMimeType("image/jpeg") - ) - - assertEquals( - expected = ImageFormat.GIF, - actual = ImageFormat.byMimeType("image/gif") - ) - - assertEquals( - expected = ImageFormat.PNG, - actual = ImageFormat.byMimeType("image/png") - ) - - assertEquals( - expected = ImageFormat.WEBP, - actual = ImageFormat.byMimeType("image/webp") - ) - - assertEquals( - expected = ImageFormat.TIFF, - actual = ImageFormat.byMimeType("image/tiff") - ) - - assertEquals( - expected = ImageFormat.HEIC, - actual = ImageFormat.byMimeType("image/heic") - ) - - assertEquals( - expected = ImageFormat.CR2, - actual = ImageFormat.byMimeType("image/x-canon-cr2") - ) - - /* OneDrive returns this wrong mime type. */ - assertEquals( - expected = ImageFormat.CR2, - actual = ImageFormat.byMimeType("image/CR2") - ) - - assertEquals( - expected = ImageFormat.RAF, - actual = ImageFormat.byMimeType("image/x-fuji-raf") - ) - - assertEquals( - expected = ImageFormat.NEF, - actual = ImageFormat.byMimeType("image/x-nikon-nef") - ) - - assertEquals( - expected = ImageFormat.ARW, - actual = ImageFormat.byMimeType("image/x-sony-arw") - ) - - assertEquals( - expected = ImageFormat.RW2, - actual = ImageFormat.byMimeType("image/x-panasonic-rw2") - ) - - assertEquals( - expected = ImageFormat.ORF, - actual = ImageFormat.byMimeType("image/x-olympus-orf") - ) - - assertEquals( - expected = ImageFormat.DNG, - actual = ImageFormat.byMimeType("image/x-adobe-dng") - ) - } - - @Test - fun testByUniformTypeIdentifier() { - - assertNull(ImageFormat.byUniformTypeIdentifier("invalid")) - - assertEquals( - expected = ImageFormat.JPEG, - actual = ImageFormat.byUniformTypeIdentifier("public.jpeg") - ) - - assertEquals( - expected = ImageFormat.GIF, - actual = ImageFormat.byUniformTypeIdentifier("com.compuserve.gif") - ) - - assertEquals( - expected = ImageFormat.PNG, - actual = ImageFormat.byUniformTypeIdentifier("public.png") - ) - - assertEquals( - expected = ImageFormat.WEBP, - actual = ImageFormat.byUniformTypeIdentifier("org.webmproject.webp") - ) - - assertEquals( - expected = ImageFormat.TIFF, - actual = ImageFormat.byUniformTypeIdentifier("public.tiff") - ) - - assertEquals( - expected = ImageFormat.HEIC, - actual = ImageFormat.byUniformTypeIdentifier("public.heic") - ) - - assertEquals( - expected = ImageFormat.CR2, - actual = ImageFormat.byUniformTypeIdentifier("com.canon.cr2-raw-image") - ) - - assertEquals( - expected = ImageFormat.RAF, - actual = ImageFormat.byUniformTypeIdentifier("com.fuji.raw-image") - ) - - assertEquals( - expected = ImageFormat.NEF, - actual = ImageFormat.byUniformTypeIdentifier("com.nikon.raw-image") - ) - - assertEquals( - expected = ImageFormat.ARW, - actual = ImageFormat.byUniformTypeIdentifier("com.sony.raw-image") - ) - - assertEquals( - expected = ImageFormat.RW2, - actual = ImageFormat.byUniformTypeIdentifier("com.panasonic.raw-image") - ) - - assertEquals( - expected = ImageFormat.ORF, - actual = ImageFormat.byUniformTypeIdentifier("com.olympus.raw-image") - ) - - assertEquals( - expected = ImageFormat.DNG, - actual = ImageFormat.byUniformTypeIdentifier("com.adobe.raw-image") - ) - } - - @Test - fun testByFileNameExtension() { - - assertNull(ImageFormat.byFileNameExtension("invalid")) - - assertEquals( - expected = ImageFormat.JPEG, - actual = ImageFormat.byFileNameExtension("image.jpeg") - ) - - assertEquals( - expected = ImageFormat.JPEG, - actual = ImageFormat.byFileNameExtension("image.jpg") - ) - - assertEquals( - expected = ImageFormat.JPEG, - actual = ImageFormat.byFileNameExtension("image.JPG") - ) - - assertEquals( - expected = ImageFormat.GIF, - actual = ImageFormat.byFileNameExtension("image.gif") - ) - - assertEquals( - expected = ImageFormat.PNG, - actual = ImageFormat.byFileNameExtension("image.png") - ) - - assertEquals( - expected = ImageFormat.WEBP, - actual = ImageFormat.byFileNameExtension("image.webp") - ) - - assertEquals( - expected = ImageFormat.TIFF, - actual = ImageFormat.byFileNameExtension("image.tif") - ) - - assertEquals( - expected = ImageFormat.TIFF, - actual = ImageFormat.byFileNameExtension("image.tiff") - ) - - assertEquals( - expected = ImageFormat.HEIC, - actual = ImageFormat.byFileNameExtension("image.heic") - ) - - assertEquals( - expected = ImageFormat.CR2, - actual = ImageFormat.byFileNameExtension("image.cr2") - ) - - assertEquals( - expected = ImageFormat.RAF, - actual = ImageFormat.byFileNameExtension("image.raf") - ) - - assertEquals( - expected = ImageFormat.NEF, - actual = ImageFormat.byFileNameExtension("image.nef") - ) - - assertEquals( - expected = ImageFormat.ARW, - actual = ImageFormat.byFileNameExtension("image.arw") - ) - - assertEquals( - expected = ImageFormat.RW2, - actual = ImageFormat.byFileNameExtension("image.rw2") - ) - - assertEquals( - expected = ImageFormat.ORF, - actual = ImageFormat.byFileNameExtension("image.orf") - ) - - assertEquals( - expected = ImageFormat.DNG, - actual = ImageFormat.byFileNameExtension("image.dng") - ) - } -} diff --git a/src/commonTest/kotlin/com/ashampoo/kim/model/PhotoRatingTest.kt b/src/commonTest/kotlin/com/ashampoo/kim/model/PhotoRatingTest.kt deleted file mode 100644 index 1119cbcf..00000000 --- a/src/commonTest/kotlin/com/ashampoo/kim/model/PhotoRatingTest.kt +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim.model - -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertNull - -class PhotoRatingTest { - - private val nullString: String? = null - - @Test - fun testOfInt() { - - assertNull(PhotoRating.Companion.of(-2)) - assertNull(PhotoRating.Companion.of(6)) - - assertEquals( - PhotoRating.REJECTED, - PhotoRating.Companion.of(-1) - ) - - assertEquals( - PhotoRating.UNRATED, - PhotoRating.Companion.of(0) - ) - - assertEquals( - PhotoRating.ONE_STAR, - PhotoRating.Companion.of(1) - ) - - assertEquals( - PhotoRating.TWO_STARS, - PhotoRating.Companion.of(2) - ) - - assertEquals( - PhotoRating.THREE_STARS, - PhotoRating.Companion.of(3) - ) - - assertEquals( - PhotoRating.FOUR_STARS, - PhotoRating.Companion.of(4) - ) - - assertEquals( - PhotoRating.FIVE_STARS, - PhotoRating.Companion.of(5) - ) - } - - @Test - fun testOfString() { - - assertNull(PhotoRating.Companion.of(nullString)) - assertNull(PhotoRating.Companion.of("")) - assertNull(PhotoRating.Companion.of(" ")) - assertNull(PhotoRating.Companion.of("hello")) - assertNull(PhotoRating.Companion.of("-2")) - assertNull(PhotoRating.Companion.of("6")) - - assertEquals( - PhotoRating.REJECTED, - PhotoRating.Companion.of("-1") - ) - - assertEquals( - PhotoRating.UNRATED, - PhotoRating.Companion.of("0") - ) - - assertEquals( - PhotoRating.ONE_STAR, - PhotoRating.Companion.of("1") - ) - - assertEquals( - PhotoRating.TWO_STARS, - PhotoRating.Companion.of("2") - ) - - assertEquals( - PhotoRating.THREE_STARS, - PhotoRating.Companion.of("3") - ) - - assertEquals( - PhotoRating.FOUR_STARS, - PhotoRating.Companion.of("4") - ) - - assertEquals( - PhotoRating.FIVE_STARS, - PhotoRating.Companion.of("5") - ) - } -} diff --git a/src/commonTest/kotlin/com/ashampoo/kim/ImageMetadataTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/MediaMetadataTest.kt similarity index 80% rename from src/commonTest/kotlin/com/ashampoo/kim/ImageMetadataTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/MediaMetadataTest.kt index 35f4bbcb..e4a66b4f 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/ImageMetadataTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/MediaMetadataTest.kt @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim +package de.stefan_oltmann.kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.fail -class ImageMetadataTest { +class MediaMetadataTest { /** * Regression test based on a fixed small set of test files. @@ -30,7 +30,7 @@ class ImageMetadataTest { @Test fun testToString() { - for (index in 1..KimTestData.TEST_PHOTO_COUNT) { + for (index in 1..KimTestData.TEST_MEDIA_COUNT) { val bytes = KimTestData.getBytesOf(index) @@ -44,10 +44,10 @@ class ImageMetadataTest { if (!equals) { - Path("build/photo_$index.txt") + Path("build/media_$index.txt") .writeBytes(actualToString) - fail("photo_$index.txt is different.") + fail("media_$index.txt is different.") } } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/PreviewImageExtractionTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/PreviewImageExtractionTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/PreviewImageExtractionTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/PreviewImageExtractionTest.kt index 4a79088a..27908659 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/PreviewImageExtractionTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/PreviewImageExtractionTest.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim +package de.stefan_oltmann.kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.assertNotNull @@ -65,10 +65,10 @@ class PreviewImageExtractionTest { if (!equals) { - Path("build/photo_${index}_preview.jpg") + Path("build/media_${index}_preview.jpg") .writeBytes(previewImageBytes) - fail("Photo $index has not the expected bytes!") + fail("Media $index has not the expected bytes!") } } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/XmpExtractionTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/XmpExtractionTest.kt similarity index 81% rename from src/commonTest/kotlin/com/ashampoo/kim/XmpExtractionTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/XmpExtractionTest.kt index 0f377f44..080832da 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/XmpExtractionTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/XmpExtractionTest.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim +package de.stefan_oltmann.kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.assertNotNull @@ -34,7 +34,11 @@ class XmpExtractionTest { KimTestData.ORF_TEST_IMAGE_INDEX, KimTestData.HEIC_TEST_IMAGE_FROM_SAMSUNG_INDEX, KimTestData.GEOTIFF_PIXEL_SCALING_INDEX, - KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX + KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX, + + // TODO Support XMP extraction for these files + KimTestData.MP4_TEST_VIDEO_INDEX, + KimTestData.MOV_TEST_VIDEO_INDEX ) // TODO Support these files as they have XMP @@ -50,7 +54,7 @@ class XmpExtractionTest { fun testExtractXmp() { @Suppress("LoopWithTooManyJumpStatements") - for (index in 1..KimTestData.TEST_PHOTO_COUNT) { + for (index in 1..KimTestData.TEST_MEDIA_COUNT) { /* Skip files without embedded XMP */ if (indicesWithoutXmp.contains(index) || indicesUnsupported.contains(index)) @@ -70,10 +74,10 @@ class XmpExtractionTest { if (!equals) { - Path("build/photo_$index.xmp") + Path("build/media_$index.xmp") .writeBytes(actualXmpBytes) - fail("Photo $index has not the expected bytes!") + fail("Media $index has not the expected bytes!") } } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteArrayExtensionsTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensionsTest.kt similarity index 98% rename from src/commonTest/kotlin/com/ashampoo/kim/common/ByteArrayExtensionsTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensionsTest.kt index 05f0d4e9..fdf9b3e9 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteArrayExtensionsTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensionsTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.test.Test import kotlin.test.assertContentEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteConversionsTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteConversionsTest.kt similarity index 97% rename from src/commonTest/kotlin/com/ashampoo/kim/common/ByteConversionsTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteConversionsTest.kt index 6ae94138..1654d6a6 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteConversionsTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteConversionsTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ExifDateUtilTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ExifDateUtilTest.kt similarity index 98% rename from src/commonTest/kotlin/com/ashampoo/kim/common/ExifDateUtilTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ExifDateUtilTest.kt index 1bb18b11..b4c3945f 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/ExifDateUtilTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ExifDateUtilTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/GpsUtilTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/GpsUtilTest.kt similarity index 98% rename from src/commonTest/kotlin/com/ashampoo/kim/common/GpsUtilTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/GpsUtilTest.kt index 5ddb3ebc..78b2b2f9 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/GpsUtilTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/GpsUtilTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoValueFormatterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KimValueFormatterTest.kt similarity index 61% rename from src/commonTest/kotlin/com/ashampoo/kim/common/PhotoValueFormatterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/KimValueFormatterTest.kt index f95e4b34..466161ab 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoValueFormatterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KimValueFormatterTest.kt @@ -13,68 +13,68 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNull -class PhotoValueFormatterTest { +class KimValueFormatterTest { @Test fun testFormatFileLength() { assertEquals( "60 B", - PhotoValueFormatter.formatFileLength(60) + KimValueFormatter.formatFileLength(60) ) assertEquals( "999 B", - PhotoValueFormatter.formatFileLength(999) + KimValueFormatter.formatFileLength(999) ) assertEquals( "1 KB", - PhotoValueFormatter.formatFileLength(1000) + KimValueFormatter.formatFileLength(1000) ) /* Ensure no fractions! */ assertEquals( "1 KB", - PhotoValueFormatter.formatFileLength(1024) + KimValueFormatter.formatFileLength(1024) ) assertEquals( "300 KB", - PhotoValueFormatter.formatFileLength(300_000) + KimValueFormatter.formatFileLength(300_000) ) /* Ensure no fractions! */ assertEquals( "301 KB", - PhotoValueFormatter.formatFileLength(300_600) + KimValueFormatter.formatFileLength(300_600) ) assertEquals( "8 MB", - PhotoValueFormatter.formatFileLength(8_000_000) + KimValueFormatter.formatFileLength(8_000_000) ) /* Only one fraction */ assertEquals( "8.2 MB", - PhotoValueFormatter.formatFileLength(8_230_000) + KimValueFormatter.formatFileLength(8_230_000) ) assertEquals( "1 GB", - PhotoValueFormatter.formatFileLength(1_000_000_000) + KimValueFormatter.formatFileLength(1_000_000_000) ) assertEquals( "1.5 GB", - PhotoValueFormatter.formatFileLength(1_500_000_000) + KimValueFormatter.formatFileLength(1_500_000_000) ) } @@ -82,28 +82,28 @@ class PhotoValueFormatterTest { fun testCreateCameraOrLensName() { assertNull( - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = null, model = null ) ) assertNull( - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "", model = "" ) ) assertNull( - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = null, model = "" ) ) assertNull( - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "", model = null ) @@ -114,7 +114,7 @@ class PhotoValueFormatterTest { */ assertEquals( "Canon EOS 60D", - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "Canon", model = "Canon EOS 60D" ) @@ -122,7 +122,7 @@ class PhotoValueFormatterTest { assertEquals( "Olympus E-M10", - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "OLYMPUS IMAGING CORP.", model = "E-M10" ) @@ -133,7 +133,7 @@ class PhotoValueFormatterTest { */ assertEquals( "Olympus M.40-150mm F4.0-5.6 R", - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = null, model = "OLYMPUS M.40-150mm F4.0-5.6 R" ) @@ -141,7 +141,7 @@ class PhotoValueFormatterTest { assertEquals( "Sony DSLR-A200", - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "SONY", model = "DSLR-A200" ) @@ -152,7 +152,7 @@ class PhotoValueFormatterTest { */ assertEquals( "Nikon D800", - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "NIKON CORPORATION", model = "NIKON D800" ) @@ -160,7 +160,7 @@ class PhotoValueFormatterTest { assertEquals( "Fujifilm X-T4", - PhotoValueFormatter.createCameraOrLensName( + KimValueFormatter.createCameraOrLensName( make = "FUJIFILM", model = "X-T4" ) @@ -172,17 +172,17 @@ class PhotoValueFormatterTest { assertEquals( "ISO 32", - PhotoValueFormatter.formatIso(32) + KimValueFormatter.formatIso(32) ) assertEquals( "ISO 100", - PhotoValueFormatter.formatIso(100) + KimValueFormatter.formatIso(100) ) assertEquals( "ISO 400", - PhotoValueFormatter.formatIso(400) + KimValueFormatter.formatIso(400) ) } @@ -192,162 +192,162 @@ class PhotoValueFormatterTest { assertEquals( "1/8000 s", - PhotoValueFormatter.formatExposureTime(0.000125) + KimValueFormatter.formatExposureTime(0.000125) ) assertEquals( "1/4000 s", - PhotoValueFormatter.formatExposureTime(0.00025) + KimValueFormatter.formatExposureTime(0.00025) ) assertEquals( "1/2000 s", - PhotoValueFormatter.formatExposureTime(0.0005) + KimValueFormatter.formatExposureTime(0.0005) ) assertEquals( "1/1250 s", - PhotoValueFormatter.formatExposureTime(0.0008) + KimValueFormatter.formatExposureTime(0.0008) ) assertEquals( "1/1000 s", - PhotoValueFormatter.formatExposureTime(0.001) + KimValueFormatter.formatExposureTime(0.001) ) assertEquals( "1/640 s", - PhotoValueFormatter.formatExposureTime(0.0015625) + KimValueFormatter.formatExposureTime(0.0015625) ) assertEquals( "1/500 s", - PhotoValueFormatter.formatExposureTime(0.002) + KimValueFormatter.formatExposureTime(0.002) ) assertEquals( "1/400 s", - PhotoValueFormatter.formatExposureTime(0.0025) + KimValueFormatter.formatExposureTime(0.0025) ) assertEquals( "1/320 s", - PhotoValueFormatter.formatExposureTime(0.003125) + KimValueFormatter.formatExposureTime(0.003125) ) assertEquals( "1/250 s", - PhotoValueFormatter.formatExposureTime(0.004) + KimValueFormatter.formatExposureTime(0.004) ) assertEquals( "1/200 s", - PhotoValueFormatter.formatExposureTime(0.005) + KimValueFormatter.formatExposureTime(0.005) ) assertEquals( "1/125 s", - PhotoValueFormatter.formatExposureTime(0.008) + KimValueFormatter.formatExposureTime(0.008) ) assertEquals( "1/100 s", - PhotoValueFormatter.formatExposureTime(0.01) + KimValueFormatter.formatExposureTime(0.01) ) assertEquals( "1/80 s", - PhotoValueFormatter.formatExposureTime(0.0125) + KimValueFormatter.formatExposureTime(0.0125) ) assertEquals( "1/60 s", - PhotoValueFormatter.formatExposureTime(0.0166) + KimValueFormatter.formatExposureTime(0.0166) ) assertEquals( "1/40 s", - PhotoValueFormatter.formatExposureTime(0.025) + KimValueFormatter.formatExposureTime(0.025) ) assertEquals( "1/30 s", - PhotoValueFormatter.formatExposureTime(0.033) + KimValueFormatter.formatExposureTime(0.033) ) assertEquals( "1/25 s", - PhotoValueFormatter.formatExposureTime(0.04) + KimValueFormatter.formatExposureTime(0.04) ) assertEquals( "1/15 s", - PhotoValueFormatter.formatExposureTime(0.066) + KimValueFormatter.formatExposureTime(0.066) ) assertEquals( "1/10 s", - PhotoValueFormatter.formatExposureTime(0.1) + KimValueFormatter.formatExposureTime(0.1) ) assertEquals( "1/8 s", - PhotoValueFormatter.formatExposureTime(0.125) + KimValueFormatter.formatExposureTime(0.125) ) assertEquals( "1/4 s", - PhotoValueFormatter.formatExposureTime(0.25) + KimValueFormatter.formatExposureTime(0.25) ) assertEquals( "1/2 s", - PhotoValueFormatter.formatExposureTime(0.5) + KimValueFormatter.formatExposureTime(0.5) ) assertEquals( "1'' s", - PhotoValueFormatter.formatExposureTime(1.0) + KimValueFormatter.formatExposureTime(1.0) ) assertEquals( "1'' 1/8 s", - PhotoValueFormatter.formatExposureTime(1.125) + KimValueFormatter.formatExposureTime(1.125) ) assertEquals( "1'' 1/4 s", - PhotoValueFormatter.formatExposureTime(1.25) + KimValueFormatter.formatExposureTime(1.25) ) assertEquals( "1'' 1/2 s", - PhotoValueFormatter.formatExposureTime(1.5) + KimValueFormatter.formatExposureTime(1.5) ) assertEquals( "2'' s", - PhotoValueFormatter.formatExposureTime(2.0) + KimValueFormatter.formatExposureTime(2.0) ) assertEquals( "2'' 1/2 s", - PhotoValueFormatter.formatExposureTime(2.5) + KimValueFormatter.formatExposureTime(2.5) ) assertEquals( "10'' s", - PhotoValueFormatter.formatExposureTime(10.0) + KimValueFormatter.formatExposureTime(10.0) ) assertEquals( "15'' s", - PhotoValueFormatter.formatExposureTime(15.0) + KimValueFormatter.formatExposureTime(15.0) ) assertEquals( "30'' s", - PhotoValueFormatter.formatExposureTime(30.0) + KimValueFormatter.formatExposureTime(30.0) ) } @@ -356,17 +356,17 @@ class PhotoValueFormatterTest { assertEquals( "ƒ2", - PhotoValueFormatter.formatFNumber(2.0) + KimValueFormatter.formatFNumber(2.0) ) assertEquals( "ƒ2.8", - PhotoValueFormatter.formatFNumber(2.8) + KimValueFormatter.formatFNumber(2.8) ) assertEquals( "ƒ8", - PhotoValueFormatter.formatFNumber(8.0) + KimValueFormatter.formatFNumber(8.0) ) } @@ -375,12 +375,12 @@ class PhotoValueFormatterTest { assertEquals( "4.2 mm", - PhotoValueFormatter.formatFocalLength(4.2) + KimValueFormatter.formatFocalLength(4.2) ) assertEquals( "18 mm", - PhotoValueFormatter.formatFocalLength(18.0) + KimValueFormatter.formatFocalLength(18.0) ) } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt similarity index 98% rename from src/commonTest/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt index 9a4cd9bb..fad21a80 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlinx.io.buffered import kotlinx.io.files.Path diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/Latin1EncodingTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingTest.kt similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/common/Latin1EncodingTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingTest.kt index 55064479..4ed244ea 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/Latin1EncodingTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlin.test.Test import kotlin.test.assertContentEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensionsTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensionsTest.kt similarity index 97% rename from src/commonTest/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensionsTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensionsTest.kt index a8c6e869..76a61b05 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensionsTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensionsTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoMetadataConverterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverterTest.kt similarity index 80% rename from src/commonTest/kotlin/com/ashampoo/kim/common/PhotoMetadataConverterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverterTest.kt index 70439130..1c01a7e3 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoMetadataConverterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverterTest.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common -import com.ashampoo.kim.Kim -import com.ashampoo.kim.model.PhotoMetadata -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.model.MetadataSummary +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNotNull -class PhotoMetadataConverterTest { +class MetadataSummaryConverterTest { @BeforeTest fun setUp() { @@ -36,9 +37,9 @@ class PhotoMetadataConverterTest { @Test fun testReadMetadataFromBytes() { - val metadataMap = mutableMapOf() + val metadataMap = mutableMapOf() - for (index in 1..KimTestData.TEST_PHOTO_COUNT) + for (index in 1..KimTestData.TEST_MEDIA_COUNT) calculateAndAppendMetadata(index, metadataMap) assertEquals( @@ -49,7 +50,7 @@ class PhotoMetadataConverterTest { private fun calculateAndAppendMetadata( index: Int, - metadataMap: MutableMap + metadataMap: MutableMap ) { /* For Non-JPG we get the full bytes. */ @@ -62,22 +63,22 @@ class PhotoMetadataConverterTest { if (index == KimTestData.HEIC_TEST_IMAGE_INDEX) return - val photoMetadata = Kim.readMetadata(bytes)?.convertToPhotoMetadata() + val summary = Kim.readMetadata(bytes)?.convertToSummary() - assertNotNull(photoMetadata) + assertNotNull(summary) - metadataMap[KimTestData.getFileName(index)] = photoMetadata + metadataMap[KimTestData.getFileName(index)] = summary } - private fun createCsvString(metadataMap: Map): String { + private fun createCsvString(metadataMap: Map): String { val stringBuilder = StringBuilder() stringBuilder.appendLine( - "name;imageFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;" + + "name;mediaFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;" + "locationName;location;city;state;country;" + "cameraMake;cameraModel;lensMake;lensModel;iso;exposureTime;fNumber;focalLength;" + - "title;description;flagged;rating;keywords;personsInAlbums;albums;" + + "title;description;flagged;rating;keywords;personsInAlbums;" + "thumbnailImageSize;thumbnailBytes.size;orientedSize.width;orientedSize.height" ) @@ -87,7 +88,7 @@ class PhotoMetadataConverterTest { val metadata = entry.value stringBuilder.appendLine( - "$name;${metadata.imageFormat};${metadata.widthPx};${metadata.heightPx};" + + "$name;${metadata.mediaFormat};${metadata.widthPx};${metadata.heightPx};" + "${metadata.orientation};${metadata.takenDate};" + "${metadata.gpsCoordinates?.latitude};${metadata.gpsCoordinates?.longitude};" + "${metadata.locationShown?.name};${metadata.locationShown?.street};" + @@ -98,7 +99,7 @@ class PhotoMetadataConverterTest { "${metadata.fNumber};${metadata.focalLength};" + "${metadata.title};${metadata.description};" + "${metadata.flagged};${metadata.rating?.value};" + - "${metadata.keywords};${metadata.personsInImage};${metadata.albums};" + + "${metadata.keywords};${metadata.personsInImage};" + "${metadata.thumbnailImageSize};${metadata.thumbnailBytes?.size};" + "${metadata.orientedSize?.width};${metadata.orientedSize?.height}" ) diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ZLibTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ZLibTest.kt similarity index 90% rename from src/commonTest/kotlin/com/ashampoo/kim/common/ZLibTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ZLibTest.kt index 3fd0b41e..c45c094f 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/common/ZLibTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ZLibTest.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,10 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common -import com.ashampoo.kim.getPathForResource -import kotlinx.io.files.Path +import com.goncalossilva.resources.Resource import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals @@ -37,13 +37,6 @@ class ZLibTest { 0xc9.toByte(), 0xc9.toByte(), 0xcc.toByte(), 0x53.toByte(), 0x04.toByte(), 0x00.toByte(), 0x23.toByte(), 0x7d.toByte(), 0x04.toByte(), 0xd2.toByte() ), - "Ashampoo GmbH & Co. KG" to byteArrayOf( - 0x78.toByte(), 0x9c.toByte(), 0x73.toByte(), 0x2c.toByte(), 0xce.toByte(), 0x48.toByte(), - 0xcc.toByte(), 0x2d.toByte(), 0xc8.toByte(), 0xcf.toByte(), 0x57.toByte(), 0x70.toByte(), - 0xcf.toByte(), 0x4d.toByte(), 0xf2.toByte(), 0x50.toByte(), 0x50.toByte(), 0x53.toByte(), - 0x70.toByte(), 0xce.toByte(), 0xd7.toByte(), 0x53.toByte(), 0xf0.toByte(), 0x76.toByte(), - 0x07.toByte(), 0x00.toByte(), 0x55.toByte(), 0x58.toByte(), 0x06.toByte(), 0xaf.toByte() - ), "The quick brown fox jumps over the lazy dog." to byteArrayOf( 0x78.toByte(), 0x9c.toByte(), 0x0b.toByte(), 0xc9.toByte(), 0x48.toByte(), 0x55.toByte(), 0x28.toByte(), 0x2c.toByte(), 0xcd.toByte(), 0x4c.toByte(), 0xce.toByte(), 0x56.toByte(), @@ -136,7 +129,7 @@ class ZLibTest { @Test fun testRoundtripWithLongText() { - val testString = Path(getPathForResource(RESOURCE_PATH)).readBytes().decodeToString() + val testString = Resource(RESOURCE_PATH).readBytes().decodeToString() val compressed = compress(testString) @@ -151,7 +144,6 @@ class ZLibTest { companion object { - private const val RESOURCE_PATH: String = - "src/commonTest/resources/com/ashampoo/kim/testdata/alice_in_wonderland.txt" + private const val RESOURCE_PATH: String = "de/stefan_oltmann/kim/testdata/alice_in_wonderland.txt" } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt similarity index 88% rename from src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt index 614ec144..ac97c3b4 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,18 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.exists -import com.ashampoo.kim.common.readBytes -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.getPathForResource -import com.ashampoo.kim.model.GpsCoordinates -import com.ashampoo.kim.model.LocationShown -import com.ashampoo.kim.model.MetadataUpdate -import com.ashampoo.kim.model.PhotoRating -import com.ashampoo.kim.model.TiffOrientation +package de.stefan_oltmann.kim.format + +import com.goncalossilva.resources.Resource +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.model.GpsCoordinates +import de.stefan_oltmann.kim.model.LocationShown +import de.stefan_oltmann.kim.model.MetadataUpdate +import de.stefan_oltmann.kim.model.ExifRating +import de.stefan_oltmann.kim.model.TiffOrientation import kotlinx.io.files.Path import kotlin.test.BeforeTest import kotlin.test.Test @@ -57,19 +56,13 @@ abstract class AbstractUpdaterTest( private val timestamp = 1_689_166_125_401 // 2023:07:12 12:48:45 - private val resourcePath: String = "src/commonTest/resources/com/ashampoo/kim/updates_$format" + private val resourcePath: String = "de/stefan_oltmann/kim/updates_$format" - private val originalBytes = Path( - getPathForResource("$resourcePath/original.$format") - ).readBytes() + private val originalBytes = Resource("$resourcePath/original.$format").readBytes() - private val noMetadataBytes = Path( - getPathForResource("$resourcePath/no_metadata.$format") - ).readBytes() + private val noMetadataBytes = Resource("$resourcePath/no_metadata.$format").readBytes() - private val thumbnailBytes = Path( - getPathForResource("$resourcePath/../testdata/test_thumb.jpg") - ).readBytes() + private val thumbnailBytes = Resource("$resourcePath/../testdata/test_thumb.jpg").readBytes() @BeforeTest fun setUp() { @@ -265,7 +258,7 @@ abstract class AbstractUpdaterTest( val newBytes = Kim.update( bytes = originalBytes, - update = MetadataUpdate.Rating(PhotoRating.FOUR_STARS) + update = MetadataUpdate.Rating(ExifRating.FOUR_STARS) ) compare("new_rating.$format", newBytes) @@ -276,7 +269,7 @@ abstract class AbstractUpdaterTest( val newBytes = Kim.update( bytes = noMetadataBytes, - update = MetadataUpdate.Rating(PhotoRating.FOUR_STARS) + update = MetadataUpdate.Rating(ExifRating.FOUR_STARS) ) compare("new_rating.no_metadata.$format", newBytes) @@ -352,9 +345,9 @@ abstract class AbstractUpdaterTest( private fun compare(fileName: String, actualBytes: ByteArray) { - val path = Path(getPathForResource("$resourcePath/$fileName")) + val resource = Resource("$resourcePath/$fileName") - if (!path.exists()) { + if (!resource.exists()) { Path("build/$fileName") .writeBytes(actualBytes) @@ -362,7 +355,7 @@ abstract class AbstractUpdaterTest( fail("Reference image $fileName does not exist.") } - val expectedBytes = path.readBytes() + val expectedBytes = resource.readBytes() val equals = expectedBytes.contentEquals(actualBytes) diff --git a/src/commonTest/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReaderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReaderTest.kt new file mode 100644 index 00000000..3b8243e9 --- /dev/null +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReaderTest.kt @@ -0,0 +1,103 @@ +/* + * Copyright 2026 Ramon Bouckaert + * Copyright 2025 Ashampoo GmbH & Co. KG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.stefan_oltmann.kim.format.bmff + +import de.stefan_oltmann.kim.format.bmff.box.BoxContainer +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData +import kotlin.test.Test +import kotlin.test.assertEquals + +class BoxReaderTest { + + @Test + fun readsBoxesFromHeic() { + + val bytes = KimTestData.getBytesOf(KimTestData.HEIC_TEST_IMAGE_INDEX) + + val byteReader = ByteArrayByteReader(bytes) + + val boxes = BoxReader.readBoxes( + byteReader = byteReader, + stopAfterMetadataRead = false + ) + + val allBoxes = BoxContainer.findAllBoxesRecursive(boxes) + + assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset) + assertEquals(36, allBoxes.first { it.type == BoxType.META }.offset) + assertEquals(48, allBoxes.first { it.type == BoxType.HDLR }.offset) + assertEquals(118, allBoxes.first { it.type == BoxType.PITM }.offset) + assertEquals(132, allBoxes.first { it.type == BoxType.IINF }.offset) + assertEquals(144, allBoxes.first { it.type == BoxType.INFE }.offset) + assertEquals(2572, allBoxes.first { it.type == BoxType.ILOC }.offset) + assertEquals(3404, allBoxes.first { it.type == BoxType.MDAT }.offset) + } + + @Test + fun readsBoxesFromAvif() { + + val bytes = KimTestData.getBytesOf(KimTestData.AVIF_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX) + + val byteReader = ByteArrayByteReader(bytes) + + val boxes = BoxReader.readBoxes( + byteReader = byteReader, + stopAfterMetadataRead = false + ) + + val allBoxes = BoxContainer.findAllBoxesRecursive(boxes) + + assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset) + assertEquals(28, allBoxes.first { it.type == BoxType.META }.offset) + assertEquals(40, allBoxes.first { it.type == BoxType.HDLR }.offset) + assertEquals(73, allBoxes.first { it.type == BoxType.PITM }.offset) + assertEquals(87, allBoxes.first { it.type == BoxType.ILOC }.offset) + assertEquals(157, allBoxes.first { it.type == BoxType.IINF }.offset) + assertEquals(169, allBoxes.first { it.type == BoxType.INFE }.offset) + assertEquals(401, allBoxes.first { it.type == BoxType.MDAT }.offset) + } + + @Test + fun readsBoxesFromAnimatedAvif() { + + val bytes = KimTestData.getBytesOf(KimTestData.ANIMATED_AVIF_TEST_IMAGE_INDEX) + + val byteReader = ByteArrayByteReader(bytes) + + val boxes = BoxReader.readBoxes( + byteReader = byteReader, + stopAfterMetadataRead = false + ) + + val allBoxes = BoxContainer.findAllBoxesRecursive(boxes) + + assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset) + assertEquals(44, allBoxes.first { it.type == BoxType.META }.offset) + assertEquals(56, allBoxes.first { it.type == BoxType.HDLR }.offset) + assertEquals(89, allBoxes.first { it.type == BoxType.PITM }.offset) + assertEquals(103, allBoxes.first { it.type == BoxType.ILOC }.offset) + assertEquals(161, allBoxes.first { it.type == BoxType.IINF }.offset) + assertEquals(173, allBoxes.first { it.type == BoxType.INFE }.offset) + assertEquals(416, allBoxes.first { it.type == BoxType.MOOV }.offset) + assertEquals(548, allBoxes.first { it.type == BoxType.TRAK }.offset) + assertEquals(560, allBoxes.first { it.type == BoxType.TKHD }.offset) + assertEquals(880, allBoxes.first { it.type == BoxType.MDIA }.offset) + assertEquals(969, allBoxes.first { it.type == BoxType.MINF }.offset) + assertEquals(1298, allBoxes.first { it.type == BoxType.MDAT }.offset) + } +} diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifImageParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParserTest.kt similarity index 89% rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifImageParserTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParserTest.kt index c5beaac9..852e15cd 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifImageParserTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParserTest.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif -import com.ashampoo.kim.format.gif.chunk.GifChunkApplicationExtension -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.format.gif.chunk.GifChunkApplicationExtension +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNotNull diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractorTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractorTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractorTest.kt index 58f1d50b..c310b1a5 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractorTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractorTest.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif -import com.ashampoo.kim.Kim -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertTrue diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdaterTest.kt similarity index 88% rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifUpdaterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdaterTest.kt index fd4684f4..046490f3 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifUpdaterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdaterTest.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif -import com.ashampoo.kim.format.AbstractUpdaterTest +import de.stefan_oltmann.kim.format.AbstractUpdaterTest class GifUpdaterTest : AbstractUpdaterTest( format = "gif", diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifWriterTest.kt similarity index 89% rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifWriterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifWriterTest.kt index 32977a77..16b6a999 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifWriterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifWriterTest.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif +package de.stefan_oltmann.kim.format.gif -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.BeforeTest import kotlin.test.Test @@ -116,11 +116,11 @@ class GifWriterTest { if (!equals) { - Path("build/photo_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.gif") + Path("build/media_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.gif") .writeBytes(newBytes) /* Also write a string representation to see differences more quickly. */ - Path("build/photo_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.txt") + Path("build/media_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.txt") .writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray()) fail("Bytes for test image #${KimTestData.GIF_TEST_IMAGE_INDEX} are different.") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt similarity index 95% rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt index 9db2ba40..645d8db9 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.model.ImageSize import kotlin.random.Random import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt similarity index 95% rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt index dbd790b1..9971c289 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.ashampoo.kim.format.gif.chunk +package de.stefan_oltmann.kim.format.gif.chunk -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.model.ImageSize import kotlin.random.Random import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/ExifThumbnailExtractionTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/ExifThumbnailExtractionTest.kt similarity index 79% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/ExifThumbnailExtractionTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/ExifThumbnailExtractionTest.kt index 5ebce53c..1ccbc333 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/ExifThumbnailExtractionTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/ExifThumbnailExtractionTest.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.assertNotNull @@ -32,7 +32,7 @@ class ExifThumbnailExtractionTest { @Test fun testExtractJpegThumbnail() { - for (index in KimTestData.photoIdsWithExifThumbnail) { + for (index in KimTestData.mediaIdsWithExifThumbnail) { /* Thumbnail directory IFD1 is corrupt. */ if (index == 21) @@ -48,7 +48,7 @@ class ExifThumbnailExtractionTest { val actualThumbnailBytes = metadata?.getExifThumbnailBytes() - assertNotNull(actualThumbnailBytes, "Photo $index has no thumbnail bytes.") + assertNotNull(actualThumbnailBytes, "Media $index has no thumbnail bytes.") val expectedThumbnailBytes = KimTestData.getExifThumbnailBytesOf(index) @@ -56,10 +56,10 @@ class ExifThumbnailExtractionTest { if (!equals) { - Path("build/photo_${index}_exifthumb.jpg") + Path("build/media_${index}_exifthumb.jpg") .writeBytes(actualThumbnailBytes) - fail("Photo $index has not the expected bytes!") + fail("Media $index has not the expected bytes!") } } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParserTest.kt similarity index 94% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParserTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParserTest.kt index e3bab951..7fc8c71d 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParserTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParserTest.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.model.ImageSize -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.model.ImageSize +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractorTest.kt similarity index 81% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractorTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractorTest.kt index 3ece3336..7debafe3 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractorTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractorTest.kt @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.fail @@ -47,10 +47,10 @@ class JpegMetadataExtractorTest { if (!equals) { - Path("build/photo_${index}_header.jpg") + Path("build/media_${index}_header.jpg") .writeBytes(actualMetadataBytes) - fail("Photo $index has not the expected bytes!") + fail("Media $index has not the expected bytes!") } } } diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt similarity index 92% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt index c266157e..c6a820cd 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriterTest.kt similarity index 92% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriterTest.kt index bd0e3629..828e0595 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriterTest.kt @@ -13,22 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata -import com.ashampoo.kim.format.jpeg.iptc.IptcRecord -import com.ashampoo.kim.format.jpeg.iptc.IptcTypes -import com.ashampoo.kim.format.tiff.TiffContents -import com.ashampoo.kim.format.tiff.constant.ExifTag -import com.ashampoo.kim.format.tiff.constant.TiffTag -import com.ashampoo.kim.format.tiff.write.TiffOutputSet -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.model.GpsCoordinates -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.testdata.KimTestData +package de.stefan_oltmann.kim.format.jpeg + +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcRecord +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes +import de.stefan_oltmann.kim.format.tiff.TiffContents +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.constant.TiffTag +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.model.GpsCoordinates +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.BeforeTest import kotlin.test.Test @@ -166,14 +166,14 @@ class JpegRewriterTest { if (!equals) { - Path("build/photo_${index}_modified.jpg") + Path("build/media_${index}_modified.jpg") .writeBytes(actualMetadataBytes) /* Also write a string representation to see differences more quickly. */ - Path("build/photo_${index}_modified.txt") + Path("build/media_${index}_modified.txt") .writeBytes(Kim.readMetadata(actualMetadataBytes).toString().encodeToByteArray()) - fail("Photo $index has not the expected bytes!") + fail("Media $index has not the expected bytes!") } } } @@ -203,7 +203,7 @@ class JpegRewriterTest { val bytes = KimTestData.getBytesOf(index) - val expectedMetadata = Kim.readMetadata(bytes) as ImageMetadata + val expectedMetadata = Kim.readMetadata(bytes) as MediaMetadata val expectedOutputSet = expectedMetadata.exif?.createOutputSet() ?: continue diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzerTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzerTest.kt similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzerTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzerTest.kt index 93dd1f17..730cf836 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzerTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzerTest.kt @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.common.toUInt16 -import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.common.toUInt16 +import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertEquals @@ -667,7 +667,7 @@ class JpegSegmentAnalyzerTest { /* Check that markers are correct. */ for (segmentInfo in segmentInfos) { - val offset = segmentInfo.offset.toInt() + val offset = segmentInfo.offset val markerAtOffset = byteArrayOf( bytes[offset], diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdaterTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdaterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdaterTest.kt index f9a1a052..6c7d5820 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdaterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdaterTest.kt @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg +package de.stefan_oltmann.kim.format.jpeg -import com.ashampoo.kim.format.AbstractUpdaterTest +import de.stefan_oltmann.kim.format.AbstractUpdaterTest class JpegUpdaterTest : AbstractUpdaterTest("jpg") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParserTest.kt similarity index 91% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParserTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParserTest.kt index 02d687c3..524d4d77 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParserTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParserTest.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc -import com.ashampoo.kim.common.convertHexStringToByteArray -import com.ashampoo.kim.common.toHex +import de.stefan_oltmann.kim.common.convertHexStringToByteArray +import de.stefan_oltmann.kim.common.toHex import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTestConstants.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTestConstants.kt similarity index 90% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTestConstants.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTestConstants.kt index e1a7e25c..c260230b 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTestConstants.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTestConstants.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc -import com.ashampoo.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.format.jpeg.JpegConstants /** A keyword with umlauts, great to test encoding. */ internal const val TEST_KEYWORD = "Äußerst schön!" diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriterTest.kt similarity index 94% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriterTest.kt index b063342d..1d12937d 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriterTest.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jpeg.iptc +package de.stefan_oltmann.kim.format.jpeg.iptc -import com.ashampoo.kim.common.toHex -import com.ashampoo.kim.format.jpeg.JpegConstants +import de.stefan_oltmann.kim.common.toHex +import de.stefan_oltmann.kim.format.jpeg.JpegConstants import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdaterTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlUpdaterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdaterTest.kt index 7ca52965..0279cd3c 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlUpdaterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdaterTest.kt @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl +package de.stefan_oltmann.kim.format.jxl -import com.ashampoo.kim.format.AbstractUpdaterTest +import de.stefan_oltmann.kim.format.AbstractUpdaterTest class JxlUpdaterTest : AbstractUpdaterTest("jxl") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriterTest.kt similarity index 88% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlWriterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriterTest.kt index 46444303..de349c14 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlWriterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriterTest.kt @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.jxl - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.format.tiff.constant.ExifTag -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 +package de.stefan_oltmann.kim.format.jxl + +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.BeforeTest import kotlin.test.Test @@ -166,11 +166,11 @@ class JxlWriterTest { if (!equals) { - Path("build/photo_${index}_modified.jxl") + Path("build/media_${index}_modified.jxl") .writeBytes(newBytes) /* Also write a string representation to see differences more quickly. */ - Path("build/photo_${index}_modified.txt") + Path("build/media_${index}_modified.txt") .writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray()) fail("Bytes for test image #$index are different.") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngImageParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngImageParserTest.kt similarity index 89% rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngImageParserTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngImageParserTest.kt index df9379d0..8c38a92f 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngImageParserTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngImageParserTest.kt @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.format.png.chunk.PngChunkItxt -import com.ashampoo.kim.format.png.chunk.PngChunkZtxt -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.format.png.chunk.PngChunkItxt +import de.stefan_oltmann.kim.format.png.chunk.PngChunkZtxt +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNotNull diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractorTest.kt similarity index 92% rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractorTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractorTest.kt index d35aa980..9904cd90 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractorTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractorTest.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.Kim -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertTrue diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngUpdaterTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngUpdaterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngUpdaterTest.kt index d40ff16f..015b6622 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngUpdaterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngUpdaterTest.kt @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.format.AbstractUpdaterTest +import de.stefan_oltmann.kim.format.AbstractUpdaterTest class PngUpdaterTest : AbstractUpdaterTest("png") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngWriterTest.kt similarity index 85% rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngWriterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngWriterTest.kt index e07f313c..eeaf7ab0 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngWriterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngWriterTest.kt @@ -13,23 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.format.jpeg.iptc.IptcBlock -import com.ashampoo.kim.format.jpeg.iptc.IptcConstants -import com.ashampoo.kim.format.jpeg.iptc.IptcParser -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.constant.ExifTag -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 +package de.stefan_oltmann.kim.format.png + +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcBlock +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcConstants +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcRecord +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes +import de.stefan_oltmann.kim.format.jpeg.iptc.IptcWriter +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.BeforeTest import kotlin.test.Test @@ -188,11 +188,11 @@ class PngWriterTest { if (!equals) { - Path("build/photo_${index}_modified.png") + Path("build/media_${index}_modified.png") .writeBytes(newBytes) /* Also write a string representation to see differences more quickly. */ - Path("build/photo_${index}_modified.txt") + Path("build/media_${index}_modified.txt") .writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray()) fail("Bytes for test image #$index are different.") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractorTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractorTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractorTest.kt index c34f9b44..d90be10b 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractorTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractorTest.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.raf +package de.stefan_oltmann.kim.format.raf -import com.ashampoo.kim.Kim -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.testdata.KimTestData +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.testdata.KimTestData import kotlin.test.Test import kotlin.test.assertTrue diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/GeoTiffUpdateTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/GeoTiffUpdateTest.kt similarity index 73% rename from src/commonTest/kotlin/com/ashampoo/kim/format/tiff/GeoTiffUpdateTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/GeoTiffUpdateTest.kt index 99a3176a..ae0fa6f6 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/GeoTiffUpdateTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/GeoTiffUpdateTest.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,31 +14,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff - -import com.ashampoo.kim.common.readBytes -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.format.tiff.constant.GeoTiffTag -import com.ashampoo.kim.format.tiff.write.TiffOutputSet -import com.ashampoo.kim.format.tiff.write.TiffWriterLossy -import com.ashampoo.kim.getPathForResource -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.output.ByteArrayByteWriter +package de.stefan_oltmann.kim.format.tiff + +import com.goncalossilva.resources.Resource +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.fail class GeoTiffUpdateTest { - private val resourcePath: String = "src/commonTest/resources/com/ashampoo/kim/updates_tif" + private val resourcePath: String = "de/stefan_oltmann/kim/updates_tif" - private val originalBytes = Path( - getPathForResource("$resourcePath/empty.tif") - ).readBytes() + private val originalBytes = Resource("$resourcePath/empty.tif").readBytes() - private val expectedBytes = Path( - getPathForResource("$resourcePath/geotiff.tif") - ).readBytes() + private val expectedBytes = Resource("$resourcePath/geotiff.tif").readBytes() @Test fun testSetGeoTiff() { diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/TiffOrientationTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/TiffOrientationTest.kt similarity index 98% rename from src/commonTest/kotlin/com/ashampoo/kim/format/tiff/TiffOrientationTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/TiffOrientationTest.kt index 4817334b..ddb886b9 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/TiffOrientationTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/TiffOrientationTest.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.tiff +package de.stefan_oltmann.kim.format.tiff -import com.ashampoo.kim.model.TiffOrientation +import de.stefan_oltmann.kim.model.TiffOrientation import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNull diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebPWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriterTest.kt similarity index 88% rename from src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebPWriterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriterTest.kt index da4ea89b..c1410f6e 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebPWriterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriterTest.kt @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.writeBytes -import com.ashampoo.kim.format.tiff.constant.ExifTag -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 +package de.stefan_oltmann.kim.format.webp + +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.writeBytes +import de.stefan_oltmann.kim.format.tiff.constant.ExifTag +import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless +import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.BeforeTest import kotlin.test.Test @@ -162,11 +162,11 @@ class WebPWriterTest { if (!equals) { - Path("build/photo_${index}_modified.webp") + Path("build/media_${index}_modified.webp") .writeBytes(newBytes) /* Also write a string representation to see differences more quickly. */ - Path("build/photo_${index}_modified.txt") + Path("build/media_${index}_modified.txt") .writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray()) fail("Bytes for test image #$index are different.") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebpUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebpUpdaterTest.kt similarity index 87% rename from src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebpUpdaterTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebpUpdaterTest.kt index 82577f78..990fa6b5 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebpUpdaterTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebpUpdaterTest.kt @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp +package de.stefan_oltmann.kim.format.webp -import com.ashampoo.kim.format.AbstractUpdaterTest +import de.stefan_oltmann.kim.format.AbstractUpdaterTest class WebpUpdaterTest : AbstractUpdaterTest("webp") diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8XTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8XTest.kt similarity index 95% rename from src/commonTest/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8XTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8XTest.kt index b4cc10ff..a0fb37a5 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8XTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8XTest.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.webp.chunk +package de.stefan_oltmann.kim.format.webp.chunk -import com.ashampoo.kim.common.convertHexStringToByteArray -import com.ashampoo.kim.format.webp.WebPConstants -import com.ashampoo.kim.model.ImageSize +import de.stefan_oltmann.kim.common.convertHexStringToByteArray +import de.stefan_oltmann.kim.format.webp.WebPConstants +import de.stefan_oltmann.kim.model.ImageSize import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/xmp/XmpReaderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReaderTest.kt similarity index 83% rename from src/commonTest/kotlin/com/ashampoo/kim/format/xmp/XmpReaderTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReaderTest.kt index b6ccdcbf..8d6b1847 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/xmp/XmpReaderTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReaderTest.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.xmp - -import com.ashampoo.kim.Kim -import com.ashampoo.kim.model.GpsCoordinates -import com.ashampoo.kim.model.LocationShown -import com.ashampoo.kim.model.PhotoMetadata -import com.ashampoo.kim.model.PhotoRating -import com.ashampoo.kim.model.TiffOrientation -import com.ashampoo.kim.testdata.KimTestData -import com.ashampoo.xmp.XMPRegionArea +package de.stefan_oltmann.kim.format.xmp + +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.model.GpsCoordinates +import de.stefan_oltmann.kim.model.LocationShown +import de.stefan_oltmann.kim.model.MetadataSummary +import de.stefan_oltmann.kim.model.ExifRating +import de.stefan_oltmann.kim.model.TiffOrientation +import de.stefan_oltmann.kim.testdata.KimTestData +import de.stefan_oltmann.xmp.XMPRegionArea import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals @@ -40,10 +41,10 @@ class XmpReaderTest { val xmp = KimTestData.getXmp("acdsee_sample.xmp") assertEquals( - expected = PhotoMetadata( + expected = MetadataSummary( orientation = TiffOrientation.STANDARD, takenDate = 1_664_279_361_000, - rating = PhotoRating.THREE_STARS, + rating = ExifRating.THREE_STARS, keywords = setOf("Braut", "Bräutigam", "Paar", "After-Party") ), actual = XmpReader.readMetadata(xmp) @@ -56,7 +57,7 @@ class XmpReaderTest { val xmp = KimTestData.getXmp("digikam_sample.xmp") assertEquals( - expected = PhotoMetadata( + expected = MetadataSummary( orientation = TiffOrientation.STANDARD, takenDate = 1_664_279_361_000, description = "Standard caption", @@ -71,7 +72,7 @@ class XmpReaderTest { state = "Niedersachsen", country = "Germany" ), - rating = PhotoRating.FOUR_STARS, + rating = ExifRating.FOUR_STARS, keywords = setOf("Pflanze", "Ecke", "MacBook"), faces = mapOf( "MacBook" to XMPRegionArea(0.581172, 0.66247, 0.583093, 0.502398) @@ -87,10 +88,10 @@ class XmpReaderTest { val xmp = KimTestData.getXmp("exiftool_sample.xmp") assertEquals( - expected = PhotoMetadata( + expected = MetadataSummary( takenDate = 1_540_041_598_000, description = "orange fox walking on street", - rating = PhotoRating.THREE_STARS, + rating = ExifRating.THREE_STARS, keywords = setOf( "\"fuchs\"", "", @@ -103,8 +104,7 @@ class XmpReaderTest { faces = mapOf( "Swiper" to XMPRegionArea(0.404336, 0.422313, 0.124503, 0.240097) ), - personsInImage = setOf("Swiper"), - albums = emptySet() + personsInImage = setOf("Swiper") ), actual = XmpReader.readMetadata(xmp) ) @@ -116,7 +116,7 @@ class XmpReaderTest { val xmp = KimTestData.getXmp("mylio_sample.xmp") assertEquals( - expected = PhotoMetadata( + expected = MetadataSummary( orientation = TiffOrientation.STANDARD, takenDate = 1_456_064_625_420, gpsCoordinates = GpsCoordinates( @@ -125,7 +125,7 @@ class XmpReaderTest { ), title = "sample title", description = "This is the description", - rating = PhotoRating.REJECTED, + rating = ExifRating.REJECTED, keywords = setOf("animal", "bird"), faces = mapOf( "Eye Left" to XMPRegionArea(0.295179, 0.278880, 0.033245, 0.05), @@ -144,9 +144,9 @@ class XmpReaderTest { val xmp = KimTestData.getXmp("narrative_sample.xmp") assertEquals( - expected = PhotoMetadata( + expected = MetadataSummary( orientation = TiffOrientation.ROTATE_RIGHT, - rating = PhotoRating.FOUR_STARS, + rating = ExifRating.FOUR_STARS, keywords = emptySet(), faces = emptyMap(), personsInImage = emptySet() @@ -161,10 +161,10 @@ class XmpReaderTest { val xmp = KimTestData.getXmp("narrative_from_mylio_sample.xmp") assertEquals( - expected = PhotoMetadata( + expected = MetadataSummary( takenDate = 1_540_041_598_620, description = "orange fox walking on street", - rating = PhotoRating.FIVE_STARS, + rating = ExifRating.FIVE_STARS, keywords = setOf( "\"fuchs\"", "", diff --git a/src/commonTest/kotlin/com/ashampoo/kim/input/PrePendingByteReaderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReaderTest.kt similarity index 98% rename from src/commonTest/kotlin/com/ashampoo/kim/input/PrePendingByteReaderTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReaderTest.kt index 66d6772b..faa67dac 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/input/PrePendingByteReaderTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReaderTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/de/stefan_oltmann/kim/model/ExifRatingTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/ExifRatingTest.kt new file mode 100644 index 00000000..3b3891df --- /dev/null +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/ExifRatingTest.kt @@ -0,0 +1,113 @@ +/* + * Copyright 2025 Ashampoo GmbH & Co. KG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.stefan_oltmann.kim.model + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class ExifRatingTest { + + private val nullString: String? = null + + @Test + fun testOfInt() { + + assertNull(ExifRating.Companion.of(-2)) + assertNull(ExifRating.Companion.of(6)) + + assertEquals( + ExifRating.REJECTED, + ExifRating.Companion.of(-1) + ) + + assertEquals( + ExifRating.UNRATED, + ExifRating.Companion.of(0) + ) + + assertEquals( + ExifRating.ONE_STAR, + ExifRating.Companion.of(1) + ) + + assertEquals( + ExifRating.TWO_STARS, + ExifRating.Companion.of(2) + ) + + assertEquals( + ExifRating.THREE_STARS, + ExifRating.Companion.of(3) + ) + + assertEquals( + ExifRating.FOUR_STARS, + ExifRating.Companion.of(4) + ) + + assertEquals( + ExifRating.FIVE_STARS, + ExifRating.Companion.of(5) + ) + } + + @Test + fun testOfString() { + + assertNull(ExifRating.Companion.of(nullString)) + assertNull(ExifRating.Companion.of("")) + assertNull(ExifRating.Companion.of(" ")) + assertNull(ExifRating.Companion.of("hello")) + assertNull(ExifRating.Companion.of("-2")) + assertNull(ExifRating.Companion.of("6")) + + assertEquals( + ExifRating.REJECTED, + ExifRating.Companion.of("-1") + ) + + assertEquals( + ExifRating.UNRATED, + ExifRating.Companion.of("0") + ) + + assertEquals( + ExifRating.ONE_STAR, + ExifRating.Companion.of("1") + ) + + assertEquals( + ExifRating.TWO_STARS, + ExifRating.Companion.of("2") + ) + + assertEquals( + ExifRating.THREE_STARS, + ExifRating.Companion.of("3") + ) + + assertEquals( + ExifRating.FOUR_STARS, + ExifRating.Companion.of("4") + ) + + assertEquals( + ExifRating.FIVE_STARS, + ExifRating.Companion.of("5") + ) + } +} diff --git a/src/commonTest/kotlin/com/ashampoo/kim/model/GpsCoordinatesTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/GpsCoordinatesTest.kt similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/model/GpsCoordinatesTest.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/model/GpsCoordinatesTest.kt index bdd1ba7b..5c23969e 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/model/GpsCoordinatesTest.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/GpsCoordinatesTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.model +package de.stefan_oltmann.kim.model import kotlin.test.Test import kotlin.test.assertEquals diff --git a/src/commonTest/kotlin/de/stefan_oltmann/kim/model/MediaFormatTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/MediaFormatTest.kt new file mode 100644 index 00000000..525f9dcb --- /dev/null +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/MediaFormatTest.kt @@ -0,0 +1,316 @@ +/* + * Copyright 2026 Ramon Bouckaert + * Copyright 2025 Ashampoo GmbH & Co. KG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package de.stefan_oltmann.kim.model + +import de.stefan_oltmann.kim.testdata.KimTestData +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class MediaFormatTest { + + @Test + fun testDetect() { + + for (index in 1..KimTestData.TEST_MEDIA_COUNT) { + + val expectedFileType = when { + index <= KimTestData.HIGHEST_JPEG_INDEX -> MediaFormat.JPEG + index == KimTestData.GIF_TEST_IMAGE_INDEX -> MediaFormat.GIF + index == KimTestData.WEBP_TEST_IMAGE_INDEX -> MediaFormat.WEBP + index == KimTestData.PNG_TEST_IMAGE_INDEX -> MediaFormat.PNG + index == KimTestData.TIFF_NONE_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.TIFF_ZIP_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.TIFF_LZW_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.PNG_APPLE_PREVIEW_TEST_IMAGE_INDEX -> MediaFormat.PNG + index == KimTestData.PNG_GIMP_TEST_IMAGE_INDEX -> MediaFormat.PNG + index == KimTestData.CR2_TEST_IMAGE_INDEX -> MediaFormat.CR2 + index == KimTestData.RAF_TEST_IMAGE_INDEX -> MediaFormat.RAF + index == KimTestData.RW2_TEST_IMAGE_INDEX -> MediaFormat.RW2 + index == KimTestData.ORF_TEST_IMAGE_INDEX -> MediaFormat.ORF + /* NEF, ARW and DNG do not have unique magic bytes and recognized as TIFF. */ + index == KimTestData.NEF_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.ARW_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.DNG_CR2_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.DNG_RAF_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.DNG_NEF_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.DNG_ARW_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.DNG_RW2_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.DNG_ORF_TEST_IMAGE_INDEX -> MediaFormat.TIFF + index == KimTestData.HEIC_TEST_IMAGE_INDEX -> MediaFormat.HEIC + index == KimTestData.HIF_TEST_IMAGE_INDEX -> MediaFormat.HEIC + index == KimTestData.HEIC_TEST_IMAGE_WITH_XMP_INDEX -> MediaFormat.HEIC + index == KimTestData.AVIF_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> MediaFormat.AVIF + index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> MediaFormat.HEIC + index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_APPLE_INDEX -> MediaFormat.HEIC + index == KimTestData.HEIC_TEST_IMAGE_FROM_SAMSUNG_INDEX -> MediaFormat.HEIC + index == KimTestData.JXL_CONTAINER_DARKTABLE_INDEX -> MediaFormat.JXL + index == KimTestData.JXL_CONTAINER_UNCOMPRESSED_INDEX -> MediaFormat.JXL + index == KimTestData.JXL_CONTAINER_COMPRESSED_INDEX -> MediaFormat.JXL + index == KimTestData.GEOTIFF_PIXEL_SCALING_INDEX -> MediaFormat.TIFF + index == KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX -> MediaFormat.TIFF + index == KimTestData.CR3_TEST_IMAGE_INDEX -> MediaFormat.CR3 + index == KimTestData.MP4_TEST_VIDEO_INDEX -> MediaFormat.MP4 + index == KimTestData.MOV_TEST_VIDEO_INDEX -> MediaFormat.MOV + index == KimTestData.ANIMATED_AVIF_TEST_IMAGE_INDEX -> MediaFormat.AVIF + index == KimTestData.ANIMATED_AVIF_TEST_IMAGE_WITH_LEGACY_ADOBE_XMP_INDEX -> MediaFormat.AVIF + index == KimTestData.ANIMATED_AVIF_TEST_IMAGE_WITH_ALT_LEGACY_ADOBE_XMP_INDEX -> MediaFormat.AVIF + else -> null + } + + val bytes = KimTestData.getBytesOf(index) + + val actualFileType = MediaFormat.detect(bytes) + + assertEquals(expectedFileType, actualFileType, "Media $index has a different type.") + } + } + + @Test + fun testByMimeType() { + + assertNull(MediaFormat.byMimeType("invalid")) + + assertEquals( + expected = MediaFormat.JPEG, + actual = MediaFormat.byMimeType("image/jpeg") + ) + + assertEquals( + expected = MediaFormat.GIF, + actual = MediaFormat.byMimeType("image/gif") + ) + + assertEquals( + expected = MediaFormat.PNG, + actual = MediaFormat.byMimeType("image/png") + ) + + assertEquals( + expected = MediaFormat.WEBP, + actual = MediaFormat.byMimeType("image/webp") + ) + + assertEquals( + expected = MediaFormat.TIFF, + actual = MediaFormat.byMimeType("image/tiff") + ) + + assertEquals( + expected = MediaFormat.HEIC, + actual = MediaFormat.byMimeType("image/heic") + ) + + assertEquals( + expected = MediaFormat.CR2, + actual = MediaFormat.byMimeType("image/x-canon-cr2") + ) + + /* OneDrive returns this wrong mime type. */ + assertEquals( + expected = MediaFormat.CR2, + actual = MediaFormat.byMimeType("image/CR2") + ) + + assertEquals( + expected = MediaFormat.RAF, + actual = MediaFormat.byMimeType("image/x-fuji-raf") + ) + + assertEquals( + expected = MediaFormat.NEF, + actual = MediaFormat.byMimeType("image/x-nikon-nef") + ) + + assertEquals( + expected = MediaFormat.ARW, + actual = MediaFormat.byMimeType("image/x-sony-arw") + ) + + assertEquals( + expected = MediaFormat.RW2, + actual = MediaFormat.byMimeType("image/x-panasonic-rw2") + ) + + assertEquals( + expected = MediaFormat.ORF, + actual = MediaFormat.byMimeType("image/x-olympus-orf") + ) + + assertEquals( + expected = MediaFormat.DNG, + actual = MediaFormat.byMimeType("image/x-adobe-dng") + ) + } + + @Test + fun testByUniformTypeIdentifier() { + + assertNull(MediaFormat.byUniformTypeIdentifier("invalid")) + + assertEquals( + expected = MediaFormat.JPEG, + actual = MediaFormat.byUniformTypeIdentifier("public.jpeg") + ) + + assertEquals( + expected = MediaFormat.GIF, + actual = MediaFormat.byUniformTypeIdentifier("com.compuserve.gif") + ) + + assertEquals( + expected = MediaFormat.PNG, + actual = MediaFormat.byUniformTypeIdentifier("public.png") + ) + + assertEquals( + expected = MediaFormat.WEBP, + actual = MediaFormat.byUniformTypeIdentifier("org.webmproject.webp") + ) + + assertEquals( + expected = MediaFormat.TIFF, + actual = MediaFormat.byUniformTypeIdentifier("public.tiff") + ) + + assertEquals( + expected = MediaFormat.HEIC, + actual = MediaFormat.byUniformTypeIdentifier("public.heic") + ) + + assertEquals( + expected = MediaFormat.CR2, + actual = MediaFormat.byUniformTypeIdentifier("com.canon.cr2-raw-image") + ) + + assertEquals( + expected = MediaFormat.RAF, + actual = MediaFormat.byUniformTypeIdentifier("com.fuji.raw-image") + ) + + assertEquals( + expected = MediaFormat.NEF, + actual = MediaFormat.byUniformTypeIdentifier("com.nikon.raw-image") + ) + + assertEquals( + expected = MediaFormat.ARW, + actual = MediaFormat.byUniformTypeIdentifier("com.sony.raw-image") + ) + + assertEquals( + expected = MediaFormat.RW2, + actual = MediaFormat.byUniformTypeIdentifier("com.panasonic.raw-image") + ) + + assertEquals( + expected = MediaFormat.ORF, + actual = MediaFormat.byUniformTypeIdentifier("com.olympus.raw-image") + ) + + assertEquals( + expected = MediaFormat.DNG, + actual = MediaFormat.byUniformTypeIdentifier("com.adobe.raw-image") + ) + } + + @Test + fun testByFileNameExtension() { + + assertNull(MediaFormat.byFileNameExtension("invalid")) + + assertEquals( + expected = MediaFormat.JPEG, + actual = MediaFormat.byFileNameExtension("image.jpeg") + ) + + assertEquals( + expected = MediaFormat.JPEG, + actual = MediaFormat.byFileNameExtension("image.jpg") + ) + + assertEquals( + expected = MediaFormat.JPEG, + actual = MediaFormat.byFileNameExtension("image.JPG") + ) + + assertEquals( + expected = MediaFormat.GIF, + actual = MediaFormat.byFileNameExtension("image.gif") + ) + + assertEquals( + expected = MediaFormat.PNG, + actual = MediaFormat.byFileNameExtension("image.png") + ) + + assertEquals( + expected = MediaFormat.WEBP, + actual = MediaFormat.byFileNameExtension("image.webp") + ) + + assertEquals( + expected = MediaFormat.TIFF, + actual = MediaFormat.byFileNameExtension("image.tif") + ) + + assertEquals( + expected = MediaFormat.TIFF, + actual = MediaFormat.byFileNameExtension("image.tiff") + ) + + assertEquals( + expected = MediaFormat.HEIC, + actual = MediaFormat.byFileNameExtension("image.heic") + ) + + assertEquals( + expected = MediaFormat.CR2, + actual = MediaFormat.byFileNameExtension("image.cr2") + ) + + assertEquals( + expected = MediaFormat.RAF, + actual = MediaFormat.byFileNameExtension("image.raf") + ) + + assertEquals( + expected = MediaFormat.NEF, + actual = MediaFormat.byFileNameExtension("image.nef") + ) + + assertEquals( + expected = MediaFormat.ARW, + actual = MediaFormat.byFileNameExtension("image.arw") + ) + + assertEquals( + expected = MediaFormat.RW2, + actual = MediaFormat.byFileNameExtension("image.rw2") + ) + + assertEquals( + expected = MediaFormat.ORF, + actual = MediaFormat.byFileNameExtension("image.orf") + ) + + assertEquals( + expected = MediaFormat.DNG, + actual = MediaFormat.byFileNameExtension("image.dng") + ) + } +} diff --git a/src/commonTest/kotlin/com/ashampoo/kim/testdata/KimTestData.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/testdata/KimTestData.kt similarity index 75% rename from src/commonTest/kotlin/com/ashampoo/kim/testdata/KimTestData.kt rename to src/commonTest/kotlin/de/stefan_oltmann/kim/testdata/KimTestData.kt index 8dd73dc3..a1944e00 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/testdata/KimTestData.kt +++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/testdata/KimTestData.kt @@ -1,4 +1,6 @@ /* + * Copyright 2026 Ramon Bouckaert + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,11 +15,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.testdata +package de.stefan_oltmann.kim.testdata -import com.ashampoo.kim.common.readBytes -import com.ashampoo.kim.getPathForResource -import kotlinx.io.files.Path +import com.goncalossilva.resources.Resource /** * This object extracts the bundled test @@ -28,9 +28,9 @@ import kotlinx.io.files.Path @Suppress("TooManyFunctions") object KimTestData { - private const val RESOURCE_PATH: String = "src/commonTest/resources/com/ashampoo/kim/testdata" + private const val RESOURCE_PATH: String = "de/stefan_oltmann/kim/testdata" - const val TEST_PHOTO_COUNT: Int = 83 + const val TEST_MEDIA_COUNT: Int = 88 const val HIGHEST_JPEG_INDEX: Int = 50 const val PNG_TEST_IMAGE_INDEX: Int = 51 @@ -66,9 +66,14 @@ object KimTestData { const val GEOTIFF_PIXEL_SCALING_INDEX: Int = 81 const val GEOTIFF_AFFINE_TRANSFORM_INDEX: Int = 82 const val CR3_TEST_IMAGE_INDEX: Int = 83 + const val MP4_TEST_VIDEO_INDEX: Int = 84 + const val MOV_TEST_VIDEO_INDEX: Int = 85 + const val ANIMATED_AVIF_TEST_IMAGE_INDEX: Int = 86 + const val ANIMATED_AVIF_TEST_IMAGE_WITH_LEGACY_ADOBE_XMP_INDEX: Int = 87 + const val ANIMATED_AVIF_TEST_IMAGE_WITH_ALT_LEGACY_ADOBE_XMP_INDEX: Int = 88 @Suppress("MagicNumber") - val photoIdsWithExifThumbnail: Set = setOf( + val mediaIdsWithExifThumbnail: Set = setOf( 2, 3, 4, 5, 6, 7, 10, 12, 15, 16, 19, 20, 21, 22, 24, 25, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 40, 41, 42, 46, 48, 49, 50, @@ -145,51 +150,52 @@ object KimTestData { GEOTIFF_PIXEL_SCALING_INDEX -> "tif" GEOTIFF_AFFINE_TRANSFORM_INDEX -> "tif" CR3_TEST_IMAGE_INDEX -> "cr3" + MP4_TEST_VIDEO_INDEX -> "mp4" + MOV_TEST_VIDEO_INDEX -> "mov" + ANIMATED_AVIF_TEST_IMAGE_INDEX -> "avif" + ANIMATED_AVIF_TEST_IMAGE_WITH_LEGACY_ADOBE_XMP_INDEX -> "avif" + ANIMATED_AVIF_TEST_IMAGE_WITH_ALT_LEGACY_ADOBE_XMP_INDEX -> "avif" else -> "jpg" } - fun getFileName(index: Int): String = "photo_$index.${getExtension(index)}" - - fun getFullImageDiskPath(index: Int): String = - getPathForResource("$RESOURCE_PATH/full/${getFileName(index)}") + fun getFileName(index: Int): String = "media_$index.${getExtension(index)}" fun getBytesOf(index: Int): ByteArray = getBytesOf(getFileName(index)) fun getBytesOf(fileName: String): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/full/$fileName")).readBytes() + Resource("$RESOURCE_PATH/full/$fileName").readBytes() fun getHeaderBytesOf(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/headers/photo_${index}_header.${getExtension(index)}")).readBytes() + Resource("$RESOURCE_PATH/headers/media_${index}_header.${getExtension(index)}").readBytes() fun getModifiedBytesOf(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/modified/photo_${index}_modified.${getExtension(index)}")).readBytes() + Resource("$RESOURCE_PATH/modified/media_${index}_modified.${getExtension(index)}").readBytes() fun getExifThumbnailBytesOf(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/exifthumbs/photo_${index}_exifthumb.jpg")).readBytes() + Resource("$RESOURCE_PATH/exifthumbs/media_${index}_exifthumb.jpg").readBytes() fun getPreviewBytesOf(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/previews/photo_${index}_preview.jpg")).readBytes() + Resource("$RESOURCE_PATH/previews/media_${index}_preview.jpg").readBytes() fun getHeaderExifBytesOf(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/headers/photo_${index}_header_exif.tif")).readBytes() + Resource("$RESOURCE_PATH/headers/media_${index}_header_exif.tif").readBytes() fun getHeaderTextFile(index: Int, identifier: String): String = - Path(getPathForResource("$RESOURCE_PATH/headers/photo_${index}_header_$identifier.txt")).readBytes() - .decodeToString() + Resource("$RESOURCE_PATH/headers/media_${index}_header_$identifier.txt").readBytes().decodeToString() fun getToStringText(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/txt/photo_$index.txt")).readBytes() + Resource("$RESOURCE_PATH/txt/media_$index.txt").readBytes() fun getXmp(fileName: String): String = - Path(getPathForResource("$RESOURCE_PATH/xmp/$fileName")).readBytes().decodeToString() + Resource("$RESOURCE_PATH/xmp/$fileName").readBytes().decodeToString() fun getOriginalXmp(index: Int): ByteArray = - Path(getPathForResource("$RESOURCE_PATH/xmp/photo_$index.xmp")).readBytes() + Resource("$RESOURCE_PATH/xmp/media_$index.xmp").readBytes() fun getFormattedXmp(index: Int): String = - Path(getPathForResource("$RESOURCE_PATH/xmp/photo_${index}_formatted.xmp")).readBytes().decodeToString() + Resource("$RESOURCE_PATH/xmp/media_${index}_formatted.xmp").readBytes().decodeToString() fun getMetadataCsvString(): String = - Path(getPathForResource("$RESOURCE_PATH/metadata.csv")).readBytes().decodeToString() + Resource("$RESOURCE_PATH/metadata.csv").readBytes().decodeToString() } diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/metadata.csv b/src/commonTest/resources/com/ashampoo/kim/testdata/metadata.csv deleted file mode 100644 index eeef735f..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/testdata/metadata.csv +++ /dev/null @@ -1,83 +0,0 @@ -name;imageFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;locationName;location;city;state;country;cameraMake;cameraModel;lensMake;lensModel;iso;exposureTime;fNumber;focalLength;title;description;flagged;rating;keywords;personsInAlbums;albums;thumbnailImageSize;thumbnailBytes.size;orientedSize.width;orientedSize.height -photo_1.jpg;JPEG;4000;2670;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];null;null;4000;2670 -photo_2.jpg;JPEG;1367;2000;STANDARD;1556991300910;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;4000;0.025;2.8;200.0;null;orange and silver fox;false;null;[mammal, dog, pet, canine, wildlife, red fox];[];[];174 x 256;9800;1367;2000 -photo_3.jpg;JPEG;2074;2592;null;1588252095000;null;null;null;null;null;null;null;OLYMPUS CORPORATION;E-M10 Mark III;null;OLYMPUS M.30mm F3.5 Macro;500;0.004;5.6;30.0;null;OLYMPUS DIGITAL CAMERA;false;2;[invertebrate, animal];[];[];205 x 256;12001;2074;2592 -photo_4.jpg;JPEG;5184;3456;null;1577057308230;null;null;null;null;null;null;null;Canon;Canon EOS REBEL T5i;null;EF-S18-55mm f/3.5-5.6 IS STM;1600;0.0015625;5.6;18.0;null;cat reclining on floor;false;1;[wood, floor, cat, flooring, mammal, pet, animal];[];[];256 x 171;7757;5184;3456 -photo_5.jpg;JPEG;3771;2121;null;1548094438000;null;null;null;null;null;null;null;FUJIFILM;X-T20;FUJIFILM;XF90mmF2 R LM WR;250;0.005;2.0;90.0;null;null;false;5;[london];[];[];256 x 144;12539;3771;2121 -photo_6.jpg;JPEG;3000;1688;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;Hawksbill Sea Turtle (Eretmochelys imbricata) The tapered head ;brown turtle;false;0;[tortoise, reptile, sea turtle, water, outdoors];[];[];256 x 144;11246;3000;1688 -photo_7.jpg;JPEG;6000;3376;null;1555517508000;null;null;null;null;null;null;null;SONY;ILCE-6000;null;DT 0mm F0 SAM;100;0.002;1.8;50.0;null;adult tan dachshund on grass field;false;0;[grass, dog, plant, mammal, animal, pet, canine, hound];[];[];256 x 144;8586;6000;3376 -photo_8.jpg;JPEG;3880;2906;null;1538889789000;-8.5;115.25466667000013;null;null;null;null;null;DJI;FC2103;null;null;100;0.005;2.8;4.5;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo.;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo. Indonesia.;false;1;[hill, nature, path, ubud, landscape, trekking, tree, travel, green, bali, background, grass, beautiful, ridge, tourism, walk, asia, summer, sky, indonesia, scenic, campuhan, holidays, road, tropical, trail, field, paradise, paddy, palm, photography, planet, view, bali indonesia, outdoor, panoramic, drone, scene, nobody, growth, cloud, sunny, scenery, way, plant, environment, terrace, forest, natural, trek];[];[];null;null;3880;2906 -photo_9.jpg;JPEG;5946;3964;null;1551179986330;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;800;0.002;5.0;300.0;Rainbow Lorikeet Parrot;Rainbow Lorikeet Parrot - a very brightly colored parrot;false;3;[adorable, animal, attentive, beak, beautiful, bird, blue, color, colorful, colours, cute, eye, feather, green, isolated, lorikeet, lory, love, multi-coloured, nature, outdoors, parakeet, park, parrot, pet, portrait, purple, rainbow, rainbow-coloured, red, species, tropical, wild, wildlife, yellow, feathers, detail];[];[];null;null;5946;3964 -photo_10.jpg;JPEG;3320;2490;null;1557499439770;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;160;6.25E-4;4.0;300.0;null;null;false;2;[];[];[];256 x 192;15009;3320;2490 -photo_11.jpg;JPEG;4094;2699;null;1367412950000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7000;null;150.0 mm f/2.8;280;0.001;6.3;150.0;null;null;false;1;[];[];[];null;null;4094;2699 -photo_12.jpg;JPEG;3482;2460;null;1296308573000;null;null;null;null;null;null;null;SONY;DSLR-A700;null;100-300mm F4.5-5.6;400;5.0E-4;5.6;250.0;null;4;false;4;[animal, bald eagle];[];[];256 x 181;12006;3482;2460 -photo_13.jpg;JPEG;1920;1080;null;null;34.0522342000061;-118.24368490001069;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown and black tiger lying on green grass during daytime;false;1;[plant, mammal, food, seasoning, flora, dill];[];[];null;null;1920;1080 -photo_14.jpg;JPEG;1920;1200;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown turtle swimming underwater;false;0;[tortoise, sea life, reptile];[];[];null;null;1920;1200 -photo_15.jpg;JPEG;5045;4000;STANDARD;1571392576570;53.595344099913866;9.941622399947342;null;null;null;null;null;NIKON CORPORATION;NIKON D5600;null;null;2800;0.008;6.3;200.0;null;chameleon perching on tree branch;false;3;[];[];[];256 x 203;13995;5045;4000 -photo_16.jpg;JPEG;2072;2590;null;1544435452820;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark III;null;EF100mm f/2.8L Macro IS USM;100;0.004;2.8;100.0;Macaw at Akumal Monkey Sanctuary;Scarlet Macaw porches on tree branch;false;2;[bird, animal, macaw, parrot];[];[];205 x 256;18107;2072;2590 -photo_17.jpg;JPEG;3136;3919;null;1546951701000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D610;null;85.0 mm f/1.4;100;8.0E-4;1.4;85.0;null;null;false;5;[animal, cat, pet, mammal, abyssinian];[];[];null;null;3136;3919 -photo_18.jpg;JPEG;3456;2304;null;1542687264000;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S18-200mm f/3.5-5.6 IS;100;0.0015625;7.1;155.0;null;null;false;null;[];[];[];null;null;3456;2304 -photo_19.jpg;JPEG;2468;4051;null;1584231200000;35.689198;51.388974;null;null;null;null;null;FUJIFILM;X-T2;FUJIFILM;XF90mmF2 R LM WR;200;null;5.6;90.0;leafs fern rain drops tropical top view nature background dreen fine art fresh sweet cool new;Green Leaves with Raindrops;false;3;[fern];[];[];156 x 256;15133;2468;4051 -photo_20.jpg;JPEG;250;250;ROTATE_RIGHT;null;null;null;null;null;null;null;null;OLYMPUS OPTICAL CO.,LTD;C750UZ;null;null;200;0.03333333333333333;4.0;6.3;null;null;false;null;[];[];[];256 x 256;5648;250;250 -photo_21.jpg;JPEG;4522;6783;STANDARD;1546604284700;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;200;0.005;5.6;85.0;null;guinea pig sitting in front of toy arcade machine;false;null;[mammal, animal, giant panda, bear, wildlife, furniture];[];[];null;null;4522;6783 -photo_22.jpg;JPEG;3024;4032;null;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;Apple;iPhone 11 Pro Max back dual camera 6mm f/2;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];[];120 x 160;7487;3024;4032 -photo_23.jpg;JPEG;6144;8192;STANDARD;1701759044000;null;null;null;null;null;null;null;Nothing;A063;null;null;1939;0.04;1.88;5.59;null;null;false;null;[];[];[];null;null;6144;8192 -photo_24.jpg;JPEG;3000;2000;null;1549610355000;null;null;null;null;null;null;null;SONY;ILCE-7RM3;null;FE 24-70mm F2.8 GM;2000;2.0;2.8;25.0;null;selective focus photography of dirt road near red bridge;false;3;[puddle];[];[];256 x 171;10674;3000;2000 -photo_25.jpg;JPEG;4660;3106;STANDARD;1526579057200;null;null;Die Igelwiese;Igelstraße 45;Igelstadt;Niedersachsen;Deutschland;Canon;Canon EOS 500D;null;EF50mm f/1.8 II;100;0.00625;3.2;50.0;null;selective focus photography of hedgehog eating on green grass field;false;4;[animal, hedgehog, mammal, porcupine, rodent];[];[];160 x 107;6164;4660;3106 -photo_26.jpg;JPEG;2304;1536;STANDARD;1491612327500;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D3300;null;55.0-200.0 mm f/4.0-5.6;1600;0.0025;4.0;55.0;null;photography of white blossoms;false;0;[cherry blossom, flora, flower, plant];[];[];null;null;2304;1536 -photo_27.jpg;JPEG;3705;2470;null;1309069015000;22.8016472;120.285884599995;null;null;null;null;null;Canon;Canon EOS REBEL T3i;null;EF400mm f/5.6L USM;400;0.0015625;5.6;400.0;null;brown butterfly on orange petaled flower;false;3;[invertebrate, cosmos];[];[];256 x 171;9685;3705;2470 -photo_28.jpg;JPEG;2304;1536;STANDARD;1510515708760;null;null;null;null;null;null;null;Canon;Canon EOS M3;null;EF-M18-55mm f/3.5-5.6 IS STM;3200;2.5E-4;5.6;55.0;null;time lapse photography of fire;false;2;[human, person, people];[];[];160 x 120;3209;2304;1536 -photo_29.jpg;JPEG;2920;4045;STANDARD;1500229594000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;E-M10;null;OLYMPUS M.14-42mm F3.5-5.6 II R;100;0.004;3.5;14.0;null;OLYMPUS DIGITAL CAMERA;false;5;[];[];[];116 x 160;4532;2920;4045 -photo_30.jpg;JPEG;3024;4032;STANDARD;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;null;null;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];[];120 x 160;4070;3024;4032 -photo_31.jpg;JPEG;5472;3648;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;Gray cat portrait;rules of third photography of orange-eyed gray cat;false;0;[];[];[];160 x 120;8567;5472;3648 -photo_32.jpg;JPEG;3525;1500;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;2;[];[];[];256 x 109;9559;3525;1500 -photo_33.jpg;JPEG;6000;4000;null;1510187139000;43.61871020000487;-116.21460679997554;null;null;null;null;null;SONY;ILCE-6300;null;E 55-210mm F4.5-6.3 OSS;200;0.01;6.3;193.0;Ducking Around;selective focus photography of duck;false;1;[animal, waterfowl];[];[];256 x 171;12748;6000;4000 -photo_34.jpg;JPEG;4928;3264;STANDARD;1352360484200;50.40160062469378;19.40082002893384;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;800;0.025;5.3;75.0;null;selective focus photography of hedgehog on ground;false;0;[mammal];[];[];null;null;4928;3264 -photo_35.jpg;JPEG;3382;2673;null;1544627475890;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF100mm f/2.8L Macro IS USM;1600;0.00625;6.3;100.0;null;null;false;5;[];[];[];256 x 202;11636;3382;2673 -photo_36.jpg;JPEG;4240;2384;STANDARD;1498511925000;null;null;null;null;null;null;null;FUJIFILM;X-Pro2;FUJIFILM;XF90mmF2 R LM WR;200;2.5E-4;2.0;90.0;null;selective focus photo of pink petaled flower;false;0;[blossom, flora, dahlia, plant];[];[];null;null;4240;2384 -photo_37.jpg;JPEG;5870;2799;STANDARD;1532721723350;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7200;null;35.0 mm f/1.8;100;10.0;6.3;35.0;null;moon illustration;false;3;[eclipse, outdoors, nature, lunar eclipse, space, outer space, night, astronomy, universe];[];[];159 x 76;1487;5870;2799 -photo_38.jpg;JPEG;2371;1580;STANDARD;1399301366760;null;null;null;null;null;null;null;Canon;Canon EOS 550D;null;EF70-200mm f/4L USM;400;8.0E-4;4.0;154.0;null;brown horse;false;2;[foal];[];[];160 x 107;11065;2371;1580 -photo_39.jpg;JPEG;4608;3456;STANDARD;1466260726000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;E-M10 ;null;OLYMPUS M.40-150mm F4.0-5.6 R;400;0.0125;5.0;102.0;null;null;false;1;[];[];[];160 x 120;9032;4608;3456 -photo_40.jpg;JPEG;4272;2848;STANDARD;1561620317200;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D500;null;70.0-200.0 mm f/2.8;320;0.003125;8.0;86.0;null;white polar bear swimming;false;3;[wildlife, bear];[];[];160 x 107;3320;4272;2848 -photo_41.jpg;JPEG;3264;1836;STANDARD;1258791581000;null;null;null;null;null;null;null;Sony Ericsson;U10i;null;null;50;0.001;2.8;4.65;null;null;false;null;[];[];[];160 x 120;7053;3264;1836 -photo_42.jpg;JPEG;1024;768;STANDARD;1011527566000;null;null;null;null;null;null;null;TRAVELER OPTICAL CO,LTD;SX330Z;null;null;100;null;null;23.28;null;null;false;null;[];[];[];160 x 120;6495;1024;768 -photo_43.jpg;JPEG;1024;768;STANDARD;1146003974000;null;null;null;null;null;null;null;Digital;Digital Cam;null;null;100;0.0031577418356584838;7.4;10.04;null;null;false;null;[];[];[];null;null;1024;768 -photo_44.jpg;JPEG;2820;3077;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;2820;3077 -photo_45.jpg;JPEG;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;null;null -photo_46.jpg;JPEG;325;407;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];102 x 128;3664;325;407 -photo_47.jpg;JPEG;260;773;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;260;773 -photo_48.jpg;JPEG;4032;3024;ROTATE_RIGHT;1669813020203;null;null;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;50;0.01;1.8;3.99;null;null;false;null;[];[];[];160 x 120;11130;3024;4032 -photo_49.jpg;JPEG;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];[];160 x 120;11200;5184;3456 -photo_50.jpg;JPEG;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];[];160 x 120;9359;6240;4160 -photo_51.png;PNG;1500;1000;STANDARD;1583941053360;14.962422;102.090533;null;null;null;null;null;Canon;Canon EOS R;null;EF70-300mm f/4-5.6L IS USM;125;0.008;6.3;300.0;Head of King cobra;brown snake on green grass;false;2;[cobra, sea life, animal, reptile, turtle, snake];[];[];256 x 170;6554;1500;1000 -photo_52.png;PNG;1000;668;STANDARD;1563088871470;55.911316666666664;36.96348166666667;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];null;null;1000;668 -photo_53.png;PNG;1000;668;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];256 x 171;7278;1000;668 -photo_54.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];[];null;null;1200;800 -photo_55.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];[];null;null;1200;800 -photo_56.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];[];null;null;1200;800 -photo_57.cr2;CR2;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];[];160 x 120;11248;5184;3456 -photo_58.raf;RAF;4416;2944;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];[];160 x 120;9457;4416;2944 -photo_59.webp;WEBP;5184;3456;STANDARD;1563981341900;null;null;null;null;null;null;null;Canon;Canon EOS Rebel T6;null;EF-S18-55mm f/3.5-5.6 IS II;100;0.016666666666666666;8.0;18.0;null;null;false;2;[];[];[];256 x 170;7245;5184;3456 -photo_61.gif;GIF;3000;3000;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;Sample GIF;This is a sample GIF used to demonstrate XMP metadata embedding.;false;null;[Example GIF with XMP metadata];[];[];null;null;3000;3000 -photo_62.nef;TIFF;4992;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;200;0.00625;6.3;30.0;null;null;false;null;[];[];[];4928 x 3264;1470727;4992;3280 -photo_63.arw;TIFF;4272;2848;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;null;200;0.016666666666666666;8.0;18.0;null;null;false;null;[];[];[];1616 x 1080;736202;4272;2848 -photo_64.rw2;RW2;null;null;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];[];null;null;null;null -photo_65.orf;ORF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;XZ-1 ;null;null;100;0.0015625;4.0;15.27;null;null;false;null;[];[];[];null;null;3680;2760 -photo_66.dng;TIFF;5344;3516;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;null;[];[];[];null;null;5344;3516 -photo_67.dng;TIFF;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;null;[];[];[];null;null;6240;4160 -photo_68.dng;TIFF;4948;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;18.0-55.0 mm f/3.5-5.6;200;0.00625;6.3;30.0;null;null;false;null;[];[];[];null;null;4948;3280 -photo_69.dng;TIFF;4288;2858;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;DT 18-55mm F3.5-5.6 SAM;200;0.016666666666666666;8.0;18.0;null;SONY DSC;false;null;[];[];[];null;null;4288;2858 -photo_70.dng;TIFF;3664;2752;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];[];null;null;3664;2752 -photo_71.dng;TIFF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;XZ-1;null;null;100;0.0015625;4.0;15.27;null;OLYMPUS DIGITAL CAMERA;false;null;[];[];[];null;null;3680;2760 -photo_72.hif;HEIC;null;null;null;1654877860250;30.052485;101.96257277777778;null;null;null;null;null;SONY;ILCE-7M4;null;FE 24-70mm F2.8 GM II;100;0.04;2.8;24.0;null;null;false;0;[];[];[];null;null;null;null -photo_73.heic;HEIC;null;null;STANDARD;1688729862000;53.21939166666667;8.239661666666667;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;40;0.00625;1.8;3.99;null;null;false;3;[bird, cat, dog];[];[];null;null;null;null -photo_74.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];[];160 x 120;8567;null;null -photo_75.heic;HEIC;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];[];160 x 120;8567;null;null -photo_76.heic;HEIC;null;null;STANDARD;1563088871470;55.911316666666664;36.963480555555556;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];null;null;null;null -photo_77.heic;HEIC;null;null;ROTATE_RIGHT;1696689965871;null;null;null;null;null;null;null;samsung;SM-G998B;null;null;640;0.016666666666666666;1.8;6.7;null;null;false;null;[];[];[];null;null;null;null -photo_78.jxl;JXL;null;null;STANDARD;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;brown turtle;false;0;[outdoors, reptile, sea turtle, tortoise, water];[];[];null;null;null;null -photo_79.jxl;JXL;null;null;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;null;false;0;[];[];[];256 x 144;11246;null;null -photo_80.jxl;JXL;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;null;null -photo_81.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;1;1 -photo_82.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;1;1 -photo_83.cr3;CR3;6000;4000;STANDARD;1675930227790;null;null;null;null;null;null;null;Canon;Canon EOS R3;null;CN-E85mm T1.3 L F;1600;0.02;4.0;85.0;null;null;false;0;[];[];[];null;null;6000;4000 diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.jxl deleted file mode 100644 index 41a638f1..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl deleted file mode 100644 index e524bd56..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl.txt deleted file mode 100644 index e5a45ff6..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl.txt +++ /dev/null @@ -1,26 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Big-endian (Motorola, MM) ----- Directory IFD0 @ 8 ---- -0000000010 0x010e ImageDescription = Äußerst süße Vögel fliegen durch die Lüfte. -0000000022 0x8769 ExifOffset = 92 - ----- Directory ExifIFD @ 92 ---- - ----- XMP ---- - - - - - - - Äußerst süße Vögel fliegen durch die Lüfte. - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.jxl.txt deleted file mode 100644 index 6b002857..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.jxl.txt +++ /dev/null @@ -1,296 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x0112 Orientation = 1 -0000000046 0x011a XResolution = 240/1 (240.0) -0000000058 0x011b YResolution = 240/1 (240.0) -0000000070 0x0128 ResolutionUnit = 2 -0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000106 0x8769 ExifOffset = 236 -0000000118 0x8825 GPSInfo = 12200 - ----- Directory ExifIFD @ 236 ---- -0000000238 0x829a ExposureTime = 1/250 (0.004) -0000000250 0x829d FNumber = 8/1 (8.0) -0000000262 0x8822 ExposureProgram = 1 -0000000274 0x8827 ISO = 125 -0000000286 0x8830 SensitivityType = 2 -0000000298 0x8832 RecommendedExposureIndex = 125 -0000000310 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000322 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000334 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000346 0x9010 OffsetTime = +02:00 -0000000358 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000370 0x9202 ApertureValue = 6/1 (6.0) -0000000382 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000394 0x9204 ExposureCompensation = 0/10 (0.0) -0000000406 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000418 0x9207 MeteringMode = 3 -0000000430 0x9208 LightSource = 0 -0000000442 0x9209 Flash = 15 -0000000454 0x920a FocalLength = 1040/100 (10.4) -0000000466 0xa001 ColorSpace = 1 -0000000478 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000490 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000502 0xa210 FocalPlaneResolutionUnit = 3 -0000000514 0xa300 FileSource = 3 -0000000526 0xa301 SceneType = 1 -0000000538 0xa401 CustomRendered = 0 -0000000550 0xa402 ExposureMode = 1 -0000000562 0xa403 WhiteBalance = 0 -0000000574 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000586 0xa405 FocalLengthIn35mmFormat = 28 -0000000598 0xa406 SceneCaptureType = 0 -0000000610 0xa408 Contrast = 0 -0000000622 0xa409 Saturation = 0 -0000000634 0xa40a Sharpness = 0 -0000000646 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000658 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory GPS @ 12200 ---- -0000012202 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] -0000012214 0x0001 GPSLatitudeRef = N -0000012226 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)] -0000012238 0x0003 GPSLongitudeRef = E -0000012250 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)] - ----- Directory IFD1 @ 860 ---- -0000000862 0x0103 Compression = 6 -0000000874 0x011a XResolution = 72/1 (72.0) -0000000886 0x011b YResolution = 72/1 (72.0) -0000000898 0x0128 ResolutionUnit = 2 -0000000910 0x0201 JpgFromRawStart = 954 -0000000922 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl deleted file mode 100644 index 5a089d74..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl.txt deleted file mode 100644 index d2ce75af..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl.txt +++ /dev/null @@ -1,30 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Big-endian (Motorola, MM) ----- Directory IFD0 @ 8 ---- -0000000010 0x8769 ExifOffset = 40 -0000000022 0x8825 GPSInfo = 48 - ----- Directory ExifIFD @ 40 ---- - ----- Directory GPS @ 48 ---- -0000000050 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] -0000000062 0x0001 GPSLatitudeRef = N -0000000074 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)] -0000000086 0x0003 GPSLongitudeRef = E -0000000098 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)] - ----- XMP ---- - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl deleted file mode 100644 index 6b184fa8..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl.txt deleted file mode 100644 index 2ad3c992..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl.txt +++ /dev/null @@ -1,319 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x0112 Orientation = 1 -0000000046 0x011a XResolution = 240/1 (240.0) -0000000058 0x011b YResolution = 240/1 (240.0) -0000000070 0x0128 ResolutionUnit = 2 -0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000106 0x8769 ExifOffset = 236 -0000000118 0x8825 GPSInfo = 12200 - ----- Directory ExifIFD @ 236 ---- -0000000238 0x829a ExposureTime = 1/250 (0.004) -0000000250 0x829d FNumber = 8/1 (8.0) -0000000262 0x8822 ExposureProgram = 1 -0000000274 0x8827 ISO = 125 -0000000286 0x8830 SensitivityType = 2 -0000000298 0x8832 RecommendedExposureIndex = 125 -0000000310 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000322 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000334 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000346 0x9010 OffsetTime = +02:00 -0000000358 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000370 0x9202 ApertureValue = 6/1 (6.0) -0000000382 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000394 0x9204 ExposureCompensation = 0/10 (0.0) -0000000406 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000418 0x9207 MeteringMode = 3 -0000000430 0x9208 LightSource = 0 -0000000442 0x9209 Flash = 15 -0000000454 0x920a FocalLength = 1040/100 (10.4) -0000000466 0xa001 ColorSpace = 1 -0000000478 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000490 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000502 0xa210 FocalPlaneResolutionUnit = 3 -0000000514 0xa300 FileSource = 3 -0000000526 0xa301 SceneType = 1 -0000000538 0xa401 CustomRendered = 0 -0000000550 0xa402 ExposureMode = 1 -0000000562 0xa403 WhiteBalance = 0 -0000000574 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000586 0xa405 FocalLengthIn35mmFormat = 28 -0000000598 0xa406 SceneCaptureType = 0 -0000000610 0xa408 Contrast = 0 -0000000622 0xa409 Saturation = 0 -0000000634 0xa40a Sharpness = 0 -0000000646 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000658 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory GPS @ 12200 ---- -0000012202 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] -0000012214 0x0001 GPSLatitudeRef = N -0000012226 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)] -0000012238 0x0003 GPSLongitudeRef = E -0000012250 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)] - ----- Directory IFD1 @ 860 ---- -0000000862 0x0103 Compression = 6 -0000000874 0x011a XResolution = 72/1 (72.0) -0000000886 0x011b YResolution = 72/1 (72.0) -0000000898 0x0128 ResolutionUnit = 2 -0000000910 0x0201 JpgFromRawStart = 954 -0000000922 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - - - - //CRASH - - - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.jxl.txt deleted file mode 100644 index 06c24d00..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.jxl.txt +++ /dev/null @@ -1,290 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x011a XResolution = 240/1 (240.0) -0000000046 0x011b YResolution = 240/1 (240.0) -0000000058 0x0128 ResolutionUnit = 2 -0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000094 0x8769 ExifOffset = 212 - ----- Directory ExifIFD @ 212 ---- -0000000214 0x829a ExposureTime = 1/250 (0.004) -0000000226 0x829d FNumber = 8/1 (8.0) -0000000238 0x8822 ExposureProgram = 1 -0000000250 0x8827 ISO = 125 -0000000262 0x8830 SensitivityType = 2 -0000000274 0x8832 RecommendedExposureIndex = 125 -0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000322 0x9010 OffsetTime = +02:00 -0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000346 0x9202 ApertureValue = 6/1 (6.0) -0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000370 0x9204 ExposureCompensation = 0/10 (0.0) -0000000382 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000394 0x9207 MeteringMode = 3 -0000000406 0x9208 LightSource = 0 -0000000418 0x9209 Flash = 15 -0000000430 0x920a FocalLength = 1040/100 (10.4) -0000000442 0xa001 ColorSpace = 1 -0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000478 0xa210 FocalPlaneResolutionUnit = 3 -0000000490 0xa300 FileSource = 3 -0000000502 0xa301 SceneType = 1 -0000000514 0xa401 CustomRendered = 0 -0000000526 0xa402 ExposureMode = 1 -0000000538 0xa403 WhiteBalance = 0 -0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000562 0xa405 FocalLengthIn35mmFormat = 28 -0000000574 0xa406 SceneCaptureType = 0 -0000000586 0xa408 Contrast = 0 -0000000598 0xa409 Saturation = 0 -0000000610 0xa40a Sharpness = 0 -0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000634 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 836 ---- -0000000838 0x0103 Compression = 6 -0000000850 0x011a XResolution = 72/1 (72.0) -0000000862 0x011b YResolution = 72/1 (72.0) -0000000874 0x0128 ResolutionUnit = 2 -0000000886 0x0201 JpgFromRawStart = 930 -0000000898 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - hello - test - Äußerst öffentlich - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.no_metadata.jxl deleted file mode 100644 index 893926cf..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl deleted file mode 100644 index 298bbc2f..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl.txt deleted file mode 100644 index 38a3d9bf..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl.txt +++ /dev/null @@ -1,306 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x011a XResolution = 240/1 (240.0) -0000000046 0x011b YResolution = 240/1 (240.0) -0000000058 0x0128 ResolutionUnit = 2 -0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000094 0x8769 ExifOffset = 212 - ----- Directory ExifIFD @ 212 ---- -0000000214 0x829a ExposureTime = 1/250 (0.004) -0000000226 0x829d FNumber = 8/1 (8.0) -0000000238 0x8822 ExposureProgram = 1 -0000000250 0x8827 ISO = 125 -0000000262 0x8830 SensitivityType = 2 -0000000274 0x8832 RecommendedExposureIndex = 125 -0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000322 0x9010 OffsetTime = +02:00 -0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000346 0x9202 ApertureValue = 6/1 (6.0) -0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000370 0x9204 ExposureCompensation = 0/10 (0.0) -0000000382 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000394 0x9207 MeteringMode = 3 -0000000406 0x9208 LightSource = 0 -0000000418 0x9209 Flash = 15 -0000000430 0x920a FocalLength = 1040/100 (10.4) -0000000442 0xa001 ColorSpace = 1 -0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000478 0xa210 FocalPlaneResolutionUnit = 3 -0000000490 0xa300 FileSource = 3 -0000000502 0xa301 SceneType = 1 -0000000514 0xa401 CustomRendered = 0 -0000000526 0xa402 ExposureMode = 1 -0000000538 0xa403 WhiteBalance = 0 -0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000562 0xa405 FocalLengthIn35mmFormat = 28 -0000000574 0xa406 SceneCaptureType = 0 -0000000586 0xa408 Contrast = 0 -0000000598 0xa409 Saturation = 0 -0000000610 0xa40a Sharpness = 0 -0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000634 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 836 ---- -0000000838 0x0103 Compression = 6 -0000000850 0x011a XResolution = 72/1 (72.0) -0000000862 0x011b YResolution = 72/1 (72.0) -0000000874 0x0128 ResolutionUnit = 2 -0000000886 0x0201 JpgFromRawStart = 930 -0000000898 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - - - - //CRASH - - - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.no_metadata.jxl.txt deleted file mode 100644 index dbe3a711..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.no_metadata.jxl.txt +++ /dev/null @@ -1,35 +0,0 @@ -File format : JXL -Resolution : null ----- XMP ---- - - - - - - - - - - - //CRASH - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl deleted file mode 100644 index 780531a0..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl.txt deleted file mode 100644 index 43a65d55..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl.txt +++ /dev/null @@ -1,290 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x011a XResolution = 240/1 (240.0) -0000000046 0x011b YResolution = 240/1 (240.0) -0000000058 0x0128 ResolutionUnit = 2 -0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000094 0x8769 ExifOffset = 212 - ----- Directory ExifIFD @ 212 ---- -0000000214 0x829a ExposureTime = 1/250 (0.004) -0000000226 0x829d FNumber = 8/1 (8.0) -0000000238 0x8822 ExposureProgram = 1 -0000000250 0x8827 ISO = 125 -0000000262 0x8830 SensitivityType = 2 -0000000274 0x8832 RecommendedExposureIndex = 125 -0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000322 0x9010 OffsetTime = +02:00 -0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000346 0x9202 ApertureValue = 6/1 (6.0) -0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000370 0x9204 ExposureCompensation = 0/10 (0.0) -0000000382 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000394 0x9207 MeteringMode = 3 -0000000406 0x9208 LightSource = 0 -0000000418 0x9209 Flash = 15 -0000000430 0x920a FocalLength = 1040/100 (10.4) -0000000442 0xa001 ColorSpace = 1 -0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000478 0xa210 FocalPlaneResolutionUnit = 3 -0000000490 0xa300 FileSource = 3 -0000000502 0xa301 SceneType = 1 -0000000514 0xa401 CustomRendered = 0 -0000000526 0xa402 ExposureMode = 1 -0000000538 0xa403 WhiteBalance = 0 -0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000562 0xa405 FocalLengthIn35mmFormat = 28 -0000000574 0xa406 SceneCaptureType = 0 -0000000586 0xa408 Contrast = 0 -0000000598 0xa409 Saturation = 0 -0000000610 0xa40a Sharpness = 0 -0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000634 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 836 ---- -0000000838 0x0103 Compression = 6 -0000000850 0x011a XResolution = 72/1 (72.0) -0000000862 0x011b YResolution = 72/1 (72.0) -0000000874 0x0128 ResolutionUnit = 2 -0000000886 0x0201 JpgFromRawStart = 930 -0000000898 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - Dora - Swiper - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.no_metadata.jxl deleted file mode 100644 index 88943a98..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.no_metadata.jxl deleted file mode 100644 index 0369dcff..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl deleted file mode 100644 index 7a45092c..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl.txt deleted file mode 100644 index 52e0ea0a..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl.txt +++ /dev/null @@ -1,17 +0,0 @@ -File format : JXL -Resolution : null ----- XMP ---- - - - - - - - Süße Vögelchen - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl deleted file mode 100644 index 392ed9b6..00000000 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl and /dev/null differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl.txt deleted file mode 100644 index c13f4dd3..00000000 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl.txt +++ /dev/null @@ -1,286 +0,0 @@ -File format : JXL -Resolution : null ----- TIFF ---- -Version 42 -Little-endian (Intel, II) ----- Directory IFD0 @ 8 ---- -0000000010 0x010f Make = SONY -0000000022 0x0110 Model = DSC-RX100 -0000000034 0x0112 Orientation = 6 -0000000046 0x011a XResolution = 240/1 (240.0) -0000000058 0x011b YResolution = 240/1 (240.0) -0000000070 0x0128 ResolutionUnit = 2 -0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows) -0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41 -0000000106 0x8769 ExifOffset = 224 - ----- Directory ExifIFD @ 224 ---- -0000000226 0x829a ExposureTime = 1/250 (0.004) -0000000238 0x829d FNumber = 8/1 (8.0) -0000000250 0x8822 ExposureProgram = 1 -0000000262 0x8827 ISO = 125 -0000000274 0x8830 SensitivityType = 2 -0000000286 0x8832 RecommendedExposureIndex = 125 -0000000298 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31] -0000000310 0x9003 DateTimeOriginal = 2019:02:25 06:14:16 -0000000322 0x9004 DateTimeDigitized = 2019:02:25 06:14:16 -0000000334 0x9010 OffsetTime = +02:00 -0000000346 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784) -0000000358 0x9202 ApertureValue = 6/1 (6.0) -0000000370 0x9203 BrightnessValue = 17574/2560 (6.864844) -0000000382 0x9204 ExposureCompensation = 0/10 (0.0) -0000000394 0x9205 MaxApertureValue = 434/256 (1.695313) -0000000406 0x9207 MeteringMode = 3 -0000000418 0x9208 LightSource = 0 -0000000430 0x9209 Flash = 15 -0000000442 0x920a FocalLength = 1040/100 (10.4) -0000000454 0xa001 ColorSpace = 1 -0000000466 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559) -0000000478 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559) -0000000490 0xa210 FocalPlaneResolutionUnit = 3 -0000000502 0xa300 FileSource = 3 -0000000514 0xa301 SceneType = 1 -0000000526 0xa401 CustomRendered = 0 -0000000538 0xa402 ExposureMode = 1 -0000000550 0xa403 WhiteBalance = 0 -0000000562 0xa404 DigitalZoomRatio = 16/16 (1.0) -0000000574 0xa405 FocalLengthIn35mmFormat = 28 -0000000586 0xa406 SceneCaptureType = 0 -0000000598 0xa408 Contrast = 0 -0000000610 0xa409 Saturation = 0 -0000000622 0xa40a Sharpness = 0 -0000000634 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)] -0000000646 0xa434 LensModel = 28-100mm F1.8-4.9 - ----- Directory IFD1 @ 848 ---- -0000000850 0x0103 Compression = 6 -0000000862 0x011a XResolution = 72/1 (72.0) -0000000874 0x011b YResolution = 72/1 (72.0) -0000000886 0x0128 ResolutionUnit = 2 -0000000898 0x0201 JpgFromRawStart = 942 -0000000910 0x0202 JpgFromRawLength = 11246 - ----- XMP ---- - - - - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - 0, 0 - 255, 255 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/copy_test.png b/src/commonTest/resources/de/stefan_oltmann/kim/copy_test.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/copy_test.png rename to src/commonTest/resources/de/stefan_oltmann/kim/copy_test.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/alice_in_wonderland.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/alice_in_wonderland.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/alice_in_wonderland.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/alice_in_wonderland.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_10_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_10_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_10_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_10_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_12_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_12_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_12_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_12_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_15_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_15_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_15_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_15_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_16_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_16_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_16_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_16_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_18_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_18_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_18_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_18_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_19_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_19_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_19_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_19_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_20_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_20_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_20_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_20_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_22_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_22_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_22_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_22_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_23_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_23_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_23_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_23_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_24_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_24_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_24_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_24_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_25_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_25_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_25_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_25_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_27_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_27_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_27_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_27_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_28_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_28_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_28_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_28_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_29_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_29_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_29_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_29_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_2_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_2_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_2_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_2_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_30_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_30_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_30_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_30_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_31_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_31_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_31_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_31_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_32_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_32_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_32_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_32_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_33_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_33_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_33_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_33_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_35_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_35_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_35_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_35_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_37_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_37_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_37_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_37_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_38_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_38_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_38_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_38_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_39_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_39_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_39_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_39_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_3_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_3_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_3_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_3_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_40_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_40_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_40_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_40_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_41_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_41_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_41_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_41_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_42_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_42_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_42_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_42_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_44_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_44_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_44_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_44_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_45_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_45_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_45_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_45_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_46_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_46_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_46_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_46_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_47_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_47_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_47_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_47_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_48_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_48_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_48_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_48_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_49_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_49_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_49_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_49_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_4_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_4_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_4_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_4_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_50_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_50_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_50_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_50_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_51_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_51_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_51_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_51_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_53_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_53_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_53_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_53_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_57_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_57_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_57_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_57_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_58_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_58_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_58_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_58_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_5_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_5_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_5_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_5_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_63_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_63_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_63_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_63_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_6_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_6_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_6_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_6_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_74_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_74_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_74_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_74_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_75_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_75_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_75_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_75_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_7_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_7_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_7_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_7_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_8_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_8_exifthumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_8_exifthumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_8_exifthumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/README.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/README.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/README.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/README.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_1.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_1.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_1.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_1.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_10.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_10.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_10.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_10.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_11.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_11.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_11.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_11.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_12.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_12.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_12.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_12.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_13.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_13.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_13.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_13.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_14.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_14.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_14.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_14.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_15.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_15.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_15.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_15.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_16.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_16.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_16.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_16.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_17.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_17.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_17.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_17.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_18.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_18.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_18.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_18.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_19.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_19.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_19.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_19.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_2.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_2.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_2.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_2.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_20.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_20.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_20.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_20.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_21.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_21.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_21.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_21.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_22.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_22.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_22.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_22.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_23.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_23.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_23.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_23.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_24.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_24.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_24.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_24.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_25.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_25.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_25.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_25.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_26.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_26.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_26.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_26.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_27.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_27.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_27.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_27.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_28.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_28.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_28.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_28.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_29.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_29.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_29.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_29.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_3.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_3.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_3.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_3.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_31.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_31.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_31.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_31.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_32.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_32.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_32.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_32.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_33.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_33.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_33.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_33.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_34.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_34.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_34.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_34.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_35.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_35.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_35.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_35.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_36.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_36.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_36.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_36.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_37.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_37.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_37.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_37.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_38.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_38.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_38.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_38.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_39.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_39.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_39.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_39.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_4.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_4.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_4.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_4.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_40.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_40.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_40.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_40.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_41.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_41.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_41.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_41.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_42.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_42.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_42.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_42.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_43.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_43.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_43.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_43.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_44.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_44.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_44.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_44.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_45.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_45.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_45.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_45.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_46.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_46.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_46.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_46.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_47.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_47.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_47.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_47.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_48.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_48.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_48.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_48.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_49.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_49.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_49.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_49.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_5.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_5.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_5.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_5.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_50.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_50.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_50.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_50.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_51.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_51.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_51.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_51.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_52.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_52.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_52.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_52.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_53.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_53.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_53.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_53.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_54.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_54.tif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_54.tif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_54.tif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_55.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_55.tif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_55.tif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_55.tif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_56.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_56.tif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_56.tif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_56.tif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_57.cr2 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_57.cr2 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_57.cr2 rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_57.cr2 diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_58.raf b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_58.raf similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_58.raf rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_58.raf diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_59.webp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_59.webp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_59.webp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_59.webp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_6.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_6.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_6.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_6.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_60.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_60.heic similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_60.heic rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_60.heic diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_61.gif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_61.gif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_61.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_61.gif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_62.nef b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_62.nef similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_62.nef rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_62.nef diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_63.arw b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_63.arw similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_63.arw rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_63.arw diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_64.rw2 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_64.rw2 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_64.rw2 rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_64.rw2 diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_65.orf b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_65.orf similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_65.orf rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_65.orf diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_66.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_66.dng similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_66.dng rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_66.dng diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_67.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_67.dng similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_67.dng rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_67.dng diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_68.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_68.dng similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_68.dng rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_68.dng diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_69.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_69.dng similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_69.dng rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_69.dng diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_7.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_7.jpg old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_7.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_7.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_70.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_70.dng similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_70.dng rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_70.dng diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_71.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_71.dng similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_71.dng rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_71.dng diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_72.hif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_72.hif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_72.hif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_72.hif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_73.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_73.heic similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_73.heic rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_73.heic diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_74.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_74.avif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_74.avif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_74.avif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_75.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_75.heic similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_75.heic rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_75.heic diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_76.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_76.heic similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_76.heic rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_76.heic diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_77.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_77.heic old mode 100755 new mode 100644 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_77.heic rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_77.heic diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_78.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_78.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_78.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_78.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_79.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_79.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_79.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_79.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_8.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_8.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_8.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_8.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_80.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_80.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_80.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_80.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_81.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_81.tif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_81.tif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_81.tif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_82.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_82.tif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_82.tif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_82.tif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_83.cr3 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_83.cr3 similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_83.cr3 rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_83.cr3 diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_84.mp4 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_84.mp4 new file mode 100644 index 00000000..caeabcc4 Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_84.mp4 differ diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_85.mov b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_85.mov new file mode 100644 index 00000000..bc3b8e6e Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_85.mov differ diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_86.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_86.avif new file mode 100644 index 00000000..61ddacfe Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_86.avif differ diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_87.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_87.avif new file mode 100644 index 00000000..ee7065df Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_87.avif differ diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_88.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_88.avif new file mode 100644 index 00000000..b6483985 Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_88.avif differ diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_9.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_9.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_9.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_9.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_10_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_10_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_10_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_10_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_11_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_11_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_11_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_11_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_12_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_12_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_12_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_12_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_13_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_13_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_13_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_13_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_14_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_14_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_14_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_14_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_15_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_15_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_15_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_15_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_16_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_16_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_16_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_16_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_17_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_17_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_17_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_17_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_18_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_18_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_18_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_18_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_19_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_19_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_19_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_19_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_1_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_1_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_1_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_1_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_20_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_20_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_20_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_20_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_21_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_21_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_21_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_21_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_22_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_22_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_22_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_22_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_23_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_23_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_23_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_23_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_24_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_24_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_24_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_24_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_25_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_25_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_25_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_25_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_26_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_26_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_26_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_26_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_27_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_27_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_27_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_27_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_28_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_28_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_28_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_28_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_29_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_29_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_29_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_29_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_2_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_2_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_2_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_2_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_30_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_30_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_30_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_30_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_31_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_31_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_31_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_31_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_32_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_32_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_32_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_32_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_33_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_33_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_33_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_33_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_34_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_34_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_34_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_34_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_35_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_35_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_35_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_35_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_36_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_36_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_36_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_36_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_37_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_37_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_37_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_37_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_38_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_38_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_38_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_38_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_39_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_39_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_39_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_39_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_3_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_3_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_3_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_3_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_40_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_40_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_40_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_40_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_41_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_41_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_41_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_41_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_42_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_42_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_42_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_42_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_43_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_43_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_43_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_43_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_44_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_44_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_44_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_44_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_45_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_45_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_45_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_45_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_46_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_46_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_46_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_46_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_47_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_47_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_47_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_47_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_48_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_48_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_48_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_48_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_49_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_49_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_49_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_49_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_4_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_4_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_4_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_4_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_50_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_50_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_50_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_50_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_exif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_exif.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_exif.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_exif.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_iptc.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_iptc.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_iptc.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_iptc.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_xmp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_xmp.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_xmp.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_xmp.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header_exif.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header_exif.tif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header_exif.tif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header_exif.tif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_53_header.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_53_header.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_53_header.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_53_header.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_58_header.raf b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_58_header.raf similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_58_header.raf rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_58_header.raf diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_5_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_5_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_5_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_5_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header.gif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header.gif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header.gif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header_xmp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header_xmp.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header_xmp.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header_xmp.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_6_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_6_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_6_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_6_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_7_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_7_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_7_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_7_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_8_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_8_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_8_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_8_header.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_9_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_9_header.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_9_header.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_9_header.jpg diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/metadata.csv b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/metadata.csv new file mode 100644 index 00000000..7007dc8f --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/metadata.csv @@ -0,0 +1,88 @@ +name;mediaFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;locationName;location;city;state;country;cameraMake;cameraModel;lensMake;lensModel;iso;exposureTime;fNumber;focalLength;title;description;flagged;rating;keywords;personsInAlbums;thumbnailImageSize;thumbnailBytes.size;orientedSize.width;orientedSize.height +media_1.jpg;JPEG;4000;2670;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];null;null;4000;2670 +media_2.jpg;JPEG;1367;2000;STANDARD;1556991300910;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;4000;0.025;2.8;200.0;null;orange and silver fox;false;null;[mammal, dog, pet, canine, wildlife, red fox];[];174 x 256;9800;1367;2000 +media_3.jpg;JPEG;2074;2592;null;1588252095000;null;null;null;null;null;null;null;OLYMPUS CORPORATION;E-M10 Mark III;null;OLYMPUS M.30mm F3.5 Macro;500;0.004;5.6;30.0;null;OLYMPUS DIGITAL CAMERA;false;2;[invertebrate, animal];[];205 x 256;12001;2074;2592 +media_4.jpg;JPEG;5184;3456;null;1577057308230;null;null;null;null;null;null;null;Canon;Canon EOS REBEL T5i;null;EF-S18-55mm f/3.5-5.6 IS STM;1600;0.0015625;5.6;18.0;null;cat reclining on floor;false;1;[wood, floor, cat, flooring, mammal, pet, animal];[];256 x 171;7757;5184;3456 +media_5.jpg;JPEG;3771;2121;null;1548094438000;null;null;null;null;null;null;null;FUJIFILM;X-T20;FUJIFILM;XF90mmF2 R LM WR;250;0.005;2.0;90.0;null;null;false;5;[london];[];256 x 144;12539;3771;2121 +media_6.jpg;JPEG;3000;1688;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;Hawksbill Sea Turtle (Eretmochelys imbricata) The tapered head ;brown turtle;false;0;[tortoise, reptile, sea turtle, water, outdoors];[];256 x 144;11246;3000;1688 +media_7.jpg;JPEG;6000;3376;null;1555517508000;null;null;null;null;null;null;null;SONY;ILCE-6000;null;DT 0mm F0 SAM;100;0.002;1.8;50.0;null;adult tan dachshund on grass field;false;0;[grass, dog, plant, mammal, animal, pet, canine, hound];[];256 x 144;8586;6000;3376 +media_8.jpg;JPEG;3880;2906;null;1538889789000;-8.5;115.25466667000013;null;null;null;null;null;DJI;FC2103;null;null;100;0.005;2.8;4.5;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo.;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo. Indonesia.;false;1;[hill, nature, path, ubud, landscape, trekking, tree, travel, green, bali, background, grass, beautiful, ridge, tourism, walk, asia, summer, sky, indonesia, scenic, campuhan, holidays, road, tropical, trail, field, paradise, paddy, palm, photography, planet, view, bali indonesia, outdoor, panoramic, drone, scene, nobody, growth, cloud, sunny, scenery, way, plant, environment, terrace, forest, natural, trek];[];null;null;3880;2906 +media_9.jpg;JPEG;5946;3964;null;1551179986330;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;800;0.002;5.0;300.0;Rainbow Lorikeet Parrot;Rainbow Lorikeet Parrot - a very brightly colored parrot;false;3;[adorable, animal, attentive, beak, beautiful, bird, blue, color, colorful, colours, cute, eye, feather, green, isolated, lorikeet, lory, love, multi-coloured, nature, outdoors, parakeet, park, parrot, pet, portrait, purple, rainbow, rainbow-coloured, red, species, tropical, wild, wildlife, yellow, feathers, detail];[];null;null;5946;3964 +media_10.jpg;JPEG;3320;2490;null;1557499439770;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;160;6.25E-4;4.0;300.0;null;null;false;2;[];[];256 x 192;15009;3320;2490 +media_11.jpg;JPEG;4094;2699;null;1367412950000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7000;null;150.0 mm f/2.8;280;0.001;6.3;150.0;null;null;false;1;[];[];null;null;4094;2699 +media_12.jpg;JPEG;3482;2460;null;1296308573000;null;null;null;null;null;null;null;SONY;DSLR-A700;null;100-300mm F4.5-5.6;400;5.0E-4;5.6;250.0;null;4;false;4;[animal, bald eagle];[];256 x 181;12006;3482;2460 +media_13.jpg;JPEG;1920;1080;null;null;34.0522342000061;-118.24368490001069;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown and black tiger lying on green grass during daytime;false;1;[plant, mammal, food, seasoning, flora, dill];[];null;null;1920;1080 +media_14.jpg;JPEG;1920;1200;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown turtle swimming underwater;false;0;[tortoise, sea life, reptile];[];null;null;1920;1200 +media_15.jpg;JPEG;5045;4000;STANDARD;1571392576570;53.595344099913866;9.941622399947342;null;null;null;null;null;NIKON CORPORATION;NIKON D5600;null;null;2800;0.008;6.3;200.0;null;chameleon perching on tree branch;false;3;[];[];256 x 203;13995;5045;4000 +media_16.jpg;JPEG;2072;2590;null;1544435452820;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark III;null;EF100mm f/2.8L Macro IS USM;100;0.004;2.8;100.0;Macaw at Akumal Monkey Sanctuary;Scarlet Macaw porches on tree branch;false;2;[bird, animal, macaw, parrot];[];205 x 256;18107;2072;2590 +media_17.jpg;JPEG;3136;3919;null;1546951701000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D610;null;85.0 mm f/1.4;100;8.0E-4;1.4;85.0;null;null;false;5;[animal, cat, pet, mammal, abyssinian];[];null;null;3136;3919 +media_18.jpg;JPEG;3456;2304;null;1542687264000;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S18-200mm f/3.5-5.6 IS;100;0.0015625;7.1;155.0;null;null;false;null;[];[];null;null;3456;2304 +media_19.jpg;JPEG;2468;4051;null;1584231200000;35.689198;51.388974;null;null;null;null;null;FUJIFILM;X-T2;FUJIFILM;XF90mmF2 R LM WR;200;null;5.6;90.0;leafs fern rain drops tropical top view nature background dreen fine art fresh sweet cool new;Green Leaves with Raindrops;false;3;[fern];[];156 x 256;15133;2468;4051 +media_20.jpg;JPEG;250;250;ROTATE_RIGHT;null;null;null;null;null;null;null;null;OLYMPUS OPTICAL CO.,LTD;C750UZ;null;null;200;0.03333333333333333;4.0;6.3;null;null;false;null;[];[];256 x 256;5648;250;250 +media_21.jpg;JPEG;4522;6783;STANDARD;1546604284700;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;200;0.005;5.6;85.0;null;guinea pig sitting in front of toy arcade machine;false;null;[mammal, animal, giant panda, bear, wildlife, furniture];[];null;null;4522;6783 +media_22.jpg;JPEG;3024;4032;null;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;Apple;iPhone 11 Pro Max back dual camera 6mm f/2;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];120 x 160;7487;3024;4032 +media_23.jpg;JPEG;6144;8192;STANDARD;1701759044000;null;null;null;null;null;null;null;Nothing;A063;null;null;1939;0.04;1.88;5.59;null;null;false;null;[];[];null;null;6144;8192 +media_24.jpg;JPEG;3000;2000;null;1549610355000;null;null;null;null;null;null;null;SONY;ILCE-7RM3;null;FE 24-70mm F2.8 GM;2000;2.0;2.8;25.0;null;selective focus photography of dirt road near red bridge;false;3;[puddle];[];256 x 171;10674;3000;2000 +media_25.jpg;JPEG;4660;3106;STANDARD;1526579057200;null;null;Die Igelwiese;Igelstraße 45;Igelstadt;Niedersachsen;Deutschland;Canon;Canon EOS 500D;null;EF50mm f/1.8 II;100;0.00625;3.2;50.0;null;selective focus photography of hedgehog eating on green grass field;false;4;[animal, hedgehog, mammal, porcupine, rodent];[];160 x 107;6164;4660;3106 +media_26.jpg;JPEG;2304;1536;STANDARD;1491612327500;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D3300;null;55.0-200.0 mm f/4.0-5.6;1600;0.0025;4.0;55.0;null;photography of white blossoms;false;0;[cherry blossom, flora, flower, plant];[];null;null;2304;1536 +media_27.jpg;JPEG;3705;2470;null;1309069015000;22.8016472;120.285884599995;null;null;null;null;null;Canon;Canon EOS REBEL T3i;null;EF400mm f/5.6L USM;400;0.0015625;5.6;400.0;null;brown butterfly on orange petaled flower;false;3;[invertebrate, cosmos];[];256 x 171;9685;3705;2470 +media_28.jpg;JPEG;2304;1536;STANDARD;1510515708760;null;null;null;null;null;null;null;Canon;Canon EOS M3;null;EF-M18-55mm f/3.5-5.6 IS STM;3200;2.5E-4;5.6;55.0;null;time lapse photography of fire;false;2;[human, person, people];[];160 x 120;3209;2304;1536 +media_29.jpg;JPEG;2920;4045;STANDARD;1500229594000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;E-M10;null;OLYMPUS M.14-42mm F3.5-5.6 II R;100;0.004;3.5;14.0;null;OLYMPUS DIGITAL CAMERA;false;5;[];[];116 x 160;4532;2920;4045 +media_30.jpg;JPEG;3024;4032;STANDARD;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;null;null;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];120 x 160;4070;3024;4032 +media_31.jpg;JPEG;5472;3648;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;Gray cat portrait;rules of third photography of orange-eyed gray cat;false;0;[];[];160 x 120;8567;5472;3648 +media_32.jpg;JPEG;3525;1500;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;2;[];[];256 x 109;9559;3525;1500 +media_33.jpg;JPEG;6000;4000;null;1510187139000;43.61871020000487;-116.21460679997554;null;null;null;null;null;SONY;ILCE-6300;null;E 55-210mm F4.5-6.3 OSS;200;0.01;6.3;193.0;Ducking Around;selective focus photography of duck;false;1;[animal, waterfowl];[];256 x 171;12748;6000;4000 +media_34.jpg;JPEG;4928;3264;STANDARD;1352360484200;50.40160062469378;19.40082002893384;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;800;0.025;5.3;75.0;null;selective focus photography of hedgehog on ground;false;0;[mammal];[];null;null;4928;3264 +media_35.jpg;JPEG;3382;2673;null;1544627475890;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF100mm f/2.8L Macro IS USM;1600;0.00625;6.3;100.0;null;null;false;5;[];[];256 x 202;11636;3382;2673 +media_36.jpg;JPEG;4240;2384;STANDARD;1498511925000;null;null;null;null;null;null;null;FUJIFILM;X-Pro2;FUJIFILM;XF90mmF2 R LM WR;200;2.5E-4;2.0;90.0;null;selective focus photo of pink petaled flower;false;0;[blossom, flora, dahlia, plant];[];null;null;4240;2384 +media_37.jpg;JPEG;5870;2799;STANDARD;1532721723350;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7200;null;35.0 mm f/1.8;100;10.0;6.3;35.0;null;moon illustration;false;3;[eclipse, outdoors, nature, lunar eclipse, space, outer space, night, astronomy, universe];[];159 x 76;1487;5870;2799 +media_38.jpg;JPEG;2371;1580;STANDARD;1399301366760;null;null;null;null;null;null;null;Canon;Canon EOS 550D;null;EF70-200mm f/4L USM;400;8.0E-4;4.0;154.0;null;brown horse;false;2;[foal];[];160 x 107;11065;2371;1580 +media_39.jpg;JPEG;4608;3456;STANDARD;1466260726000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;E-M10 ;null;OLYMPUS M.40-150mm F4.0-5.6 R;400;0.0125;5.0;102.0;null;null;false;1;[];[];160 x 120;9032;4608;3456 +media_40.jpg;JPEG;4272;2848;STANDARD;1561620317200;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D500;null;70.0-200.0 mm f/2.8;320;0.003125;8.0;86.0;null;white polar bear swimming;false;3;[wildlife, bear];[];160 x 107;3320;4272;2848 +media_41.jpg;JPEG;3264;1836;STANDARD;1258791581000;null;null;null;null;null;null;null;Sony Ericsson;U10i;null;null;50;0.001;2.8;4.65;null;null;false;null;[];[];160 x 120;7053;3264;1836 +media_42.jpg;JPEG;1024;768;STANDARD;1011527566000;null;null;null;null;null;null;null;TRAVELER OPTICAL CO,LTD;SX330Z;null;null;100;null;null;23.28;null;null;false;null;[];[];160 x 120;6495;1024;768 +media_43.jpg;JPEG;1024;768;STANDARD;1146003974000;null;null;null;null;null;null;null;Digital;Digital Cam;null;null;100;0.0031577418356584838;7.4;10.04;null;null;false;null;[];[];null;null;1024;768 +media_44.jpg;JPEG;2820;3077;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;2820;3077 +media_45.jpg;JPEG;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null +media_46.jpg;JPEG;325;407;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];102 x 128;3664;325;407 +media_47.jpg;JPEG;260;773;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;260;773 +media_48.jpg;JPEG;4032;3024;ROTATE_RIGHT;1669813020203;null;null;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;50;0.01;1.8;3.99;null;null;false;null;[];[];160 x 120;11130;3024;4032 +media_49.jpg;JPEG;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];160 x 120;11200;5184;3456 +media_50.jpg;JPEG;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];160 x 120;9359;6240;4160 +media_51.png;PNG;1500;1000;STANDARD;1583941053360;14.962422;102.090533;null;null;null;null;null;Canon;Canon EOS R;null;EF70-300mm f/4-5.6L IS USM;125;0.008;6.3;300.0;Head of King cobra;brown snake on green grass;false;2;[cobra, sea life, animal, reptile, turtle, snake];[];256 x 170;6554;1500;1000 +media_52.png;PNG;1000;668;STANDARD;1563088871470;55.911316666666664;36.96348166666667;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];null;null;1000;668 +media_53.png;PNG;1000;668;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];256 x 171;7278;1000;668 +media_54.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];null;null;1200;800 +media_55.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];null;null;1200;800 +media_56.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];null;null;1200;800 +media_57.cr2;CR2;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];160 x 120;11248;5184;3456 +media_58.raf;RAF;4416;2944;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];160 x 120;9457;4416;2944 +media_59.webp;WEBP;5184;3456;STANDARD;1563981341900;null;null;null;null;null;null;null;Canon;Canon EOS Rebel T6;null;EF-S18-55mm f/3.5-5.6 IS II;100;0.016666666666666666;8.0;18.0;null;null;false;2;[];[];256 x 170;7245;5184;3456 +media_61.gif;GIF;3000;3000;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;Sample GIF;This is a sample GIF used to demonstrate XMP metadata embedding.;false;null;[Example GIF with XMP metadata];[];null;null;3000;3000 +media_62.nef;TIFF;4992;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;200;0.00625;6.3;30.0;null;null;false;null;[];[];4928 x 3264;1470727;4992;3280 +media_63.arw;TIFF;4272;2848;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;null;200;0.016666666666666666;8.0;18.0;null;null;false;null;[];[];1616 x 1080;736202;4272;2848 +media_64.rw2;RW2;null;null;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];null;null;null;null +media_65.orf;ORF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;XZ-1 ;null;null;100;0.0015625;4.0;15.27;null;null;false;null;[];[];null;null;3680;2760 +media_66.dng;TIFF;5344;3516;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;null;[];[];null;null;5344;3516 +media_67.dng;TIFF;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;null;[];[];null;null;6240;4160 +media_68.dng;TIFF;4948;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;18.0-55.0 mm f/3.5-5.6;200;0.00625;6.3;30.0;null;null;false;null;[];[];null;null;4948;3280 +media_69.dng;TIFF;4288;2858;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;DT 18-55mm F3.5-5.6 SAM;200;0.016666666666666666;8.0;18.0;null;SONY DSC;false;null;[];[];null;null;4288;2858 +media_70.dng;TIFF;3664;2752;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];null;null;3664;2752 +media_71.dng;TIFF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;XZ-1;null;null;100;0.0015625;4.0;15.27;null;OLYMPUS DIGITAL CAMERA;false;null;[];[];null;null;3680;2760 +media_72.hif;HEIC;null;null;null;1654877860250;30.052485;101.96257277777778;null;null;null;null;null;SONY;ILCE-7M4;null;FE 24-70mm F2.8 GM II;100;0.04;2.8;24.0;null;null;false;0;[];[];null;null;null;null +media_73.heic;HEIC;null;null;STANDARD;1688729862000;53.21939166666667;8.239661666666667;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;40;0.00625;1.8;3.99;null;null;false;3;[bird, cat, dog];[];null;null;null;null +media_74.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];160 x 120;8567;null;null +media_75.heic;HEIC;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];160 x 120;8567;null;null +media_76.heic;HEIC;null;null;STANDARD;1563088871470;55.911316666666664;36.963480555555556;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];null;null;null;null +media_77.heic;HEIC;null;null;ROTATE_RIGHT;1696689965871;null;null;null;null;null;null;null;samsung;SM-G998B;null;null;640;0.016666666666666666;1.8;6.7;null;null;false;null;[];[];null;null;null;null +media_78.jxl;JXL;null;null;STANDARD;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;brown turtle;false;0;[outdoors, reptile, sea turtle, tortoise, water];[];null;null;null;null +media_79.jxl;JXL;null;null;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;null;false;0;[];[];256 x 144;11246;null;null +media_80.jxl;JXL;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null +media_81.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;1;1 +media_82.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;1;1 +media_83.cr3;CR3;6000;4000;STANDARD;1675930227790;null;null;null;null;null;null;null;Canon;Canon EOS R3;null;CN-E85mm T1.3 L F;1600;0.02;4.0;85.0;null;null;false;0;[];[];null;null;6000;4000 +media_84.mp4;MP4;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null +media_85.mov;MOV;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null +media_86.avif;AVIF;null;null;STANDARD;1444567304000;53.5953444445;9.941622222166666;Die Igelwiese;Igelstraße 45;Igelstadt;Niedersachsen;Deutschland;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;photo of a grey cat with orange eyes over a plain background;false;4;[animal, hedgehog, mammal, porcupine, rodent];[];160 x 120;8567;null;null +media_87.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;Animated AVIF with XMP in top-level UUID box;false;3;[];[];160 x 120;8567;null;null +media_88.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;Animated AVIF with XMP in UUID box inside moov;false;4;[];[];160 x 120;8567;null;null diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/.gitattributes similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/.gitattributes rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/.gitattributes diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.png similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.png rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.png diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.webp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.webp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.webp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.webp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_61_modified.gif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_61_modified.gif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_61_modified.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_61_modified.gif diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_57_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_57_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_57_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_57_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_58_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_58_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_58_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_58_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_62_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_62_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_62_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_62_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_63_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_63_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_63_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_63_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_64_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_64_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_64_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_64_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_65_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_65_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_65_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_65_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_66_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_66_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_66_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_66_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_67_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_67_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_67_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_67_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_68_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_68_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_68_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_68_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_69_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_69_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_69_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_69_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_70_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_70_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_70_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_70_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_71_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_71_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_71_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_71_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_83_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_83_preview.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_83_preview.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_83_preview.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/test_thumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/test_thumb.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/test_thumb.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/test_thumb.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/.gitattributes similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/.gitattributes rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/.gitattributes diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_1.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_1.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_1.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_1.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_10.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_10.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_10.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_10.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_11.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_11.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_11.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_11.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_12.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_12.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_12.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_12.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_13.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_13.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_13.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_13.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_14.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_14.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_14.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_14.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_15.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_15.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_15.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_15.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_16.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_16.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_16.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_16.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_17.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_17.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_17.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_17.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_18.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_18.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_18.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_18.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_19.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_19.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_19.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_19.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_2.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_2.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_2.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_2.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_20.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_20.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_20.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_20.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_21.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_21.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_21.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_21.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_22.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_22.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_22.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_22.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_23.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_23.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_23.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_23.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_24.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_24.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_24.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_24.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_25.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_25.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_25.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_25.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_26.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_26.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_26.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_26.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_27.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_27.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_27.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_27.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_28.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_28.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_28.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_28.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_29.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_29.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_29.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_29.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_3.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_3.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_3.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_3.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_30.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_30.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_30.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_30.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_31.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_31.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_31.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_31.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_32.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_32.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_32.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_32.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_33.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_33.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_33.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_33.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_34.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_34.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_34.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_34.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_35.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_35.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_35.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_35.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_36.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_36.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_36.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_36.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_37.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_37.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_37.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_37.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_38.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_38.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_38.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_38.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_39.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_39.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_39.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_39.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_4.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_4.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_4.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_4.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_40.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_40.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_40.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_40.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_41.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_41.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_41.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_41.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_42.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_42.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_42.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_42.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_43.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_43.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_43.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_43.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_44.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_44.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_44.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_44.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_45.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_45.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_45.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_45.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_46.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_46.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_46.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_46.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_47.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_47.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_47.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_47.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_48.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_48.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_48.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_48.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_49.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_49.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_49.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_49.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_5.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_5.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_5.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_5.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_50.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_50.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_50.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_50.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_51.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_51.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_51.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_51.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_52.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_52.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_52.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_52.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_53.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_53.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_53.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_53.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_54.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_54.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_54.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_54.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_55.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_55.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_55.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_55.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_56.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_56.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_56.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_56.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_57.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_57.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_57.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_57.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_58.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_58.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_58.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_58.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_59.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_59.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_59.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_59.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_6.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_6.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_6.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_6.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_60.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_60.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_60.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_60.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_61.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_61.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_61.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_61.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_62.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_62.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_62.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_62.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_63.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_63.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_63.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_63.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_64.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_64.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_64.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_64.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_65.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_65.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_65.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_65.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_66.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_66.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_66.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_66.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_67.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_67.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_67.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_67.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_68.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_68.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_68.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_68.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_69.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_69.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_69.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_69.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_7.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_7.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_7.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_7.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_70.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_70.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_70.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_70.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_71.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_71.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_71.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_71.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_72.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_72.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_72.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_72.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_73.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_73.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_73.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_73.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_74.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_74.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_74.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_74.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_75.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_75.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_75.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_75.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_76.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_76.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_76.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_76.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_77.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_77.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_77.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_77.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_78.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_78.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_78.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_78.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_79.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_79.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_79.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_79.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_8.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_8.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_8.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_8.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_80.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_80.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_80.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_80.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_81.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_81.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_81.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_81.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_82.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_82.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_82.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_82.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_83.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_83.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_83.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_83.txt diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_84.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_84.txt new file mode 100644 index 00000000..307def97 --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_84.txt @@ -0,0 +1,2 @@ +File format : MP4 +Resolution : null diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_85.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_85.txt new file mode 100644 index 00000000..a850a4dd --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_85.txt @@ -0,0 +1,2 @@ +File format : MOV +Resolution : null diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_86.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_86.txt new file mode 100644 index 00000000..7c8ca5da --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_86.txt @@ -0,0 +1,577 @@ +File format : AVIF +Resolution : null +---- TIFF ---- +Version 42 +Little-endian (Intel, II) +---- Directory IFD0 @ 8 ---- +0000000010 0x010f Make = Canon +0000000022 0x0110 Model = Canon EOS 70D +0000000034 0x0112 Orientation = 1 +0000000046 0x011a XResolution = 72/1 (72.0) +0000000058 0x011b YResolution = 72/1 (72.0) +0000000070 0x0128 ResolutionUnit = 2 +0000000082 0x0132 ModifyDate = 2015:10:11 14:41:44 +0000000094 0x013b Artist = +0000000106 0x0213 YCbCrPositioning = 2 +0000000118 0x8298 Copyright = +0000000130 0x8769 ExifOffset = 214 +0000000142 0x8825 GPSInfo = 9350 + +---- Directory ExifIFD @ 214 ---- +0000000216 0x829a ExposureTime = 1/60 (0.016667) +0000000228 0x829d FNumber = 32/10 (3.2) +0000000240 0x8822 ExposureProgram = 2 +0000000252 0x8827 ISO = 400 +0000000264 0x8830 SensitivityType = 2 +0000000276 0x8832 RecommendedExposureIndex = 400 +0000000288 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x30] +0000000300 0x9003 DateTimeOriginal = 2015:10:11 14:41:44 +0000000312 0x9004 DateTimeDigitized = 2015:10:11 14:41:44 +0000000324 0x9101 ComponentsConfiguration = [0x01, 0x02, 0x03, 0x00] +0000000336 0x9201 ShutterSpeedValue = 393216/65536 (6.0) +0000000348 0x9202 ApertureValue = 221184/65536 (3.375) +0000000360 0x9204 ExposureCompensation = 0/1 (0.0) +0000000372 0x9207 MeteringMode = 5 +0000000384 0x9209 Flash = 16 +0000000396 0x920a FocalLength = 50/1 (50.0) +0000000408 0x927c MakerNote = [8200 bytes] +0000000420 0x9286 UserComment = +0000000432 0x9290 SubSecTime = 00 +0000000444 0x9291 SubSecTimeOriginal = 00 +0000000456 0x9292 SubSecTimeDigitized = 00 +0000000468 0xa000 FlashpixVersion = [0x30, 0x31, 0x30, 0x30] +0000000480 0xa001 ColorSpace = 1 +0000000492 0xa002 ExifImageWidth = 5472 +0000000504 0xa003 ExifImageHeight = 3648 +0000000516 0xa005 InteropOffset = 9320 +0000000528 0xa20e FocalPlaneXResolution = 5472000/899 (6086.76307) +0000000540 0xa20f FocalPlaneYResolution = 3648000/599 (6090.15025) +0000000552 0xa210 FocalPlaneResolutionUnit = 2 +0000000564 0xa401 CustomRendered = 0 +0000000576 0xa402 ExposureMode = 0 +0000000588 0xa403 WhiteBalance = 0 +0000000600 0xa406 SceneCaptureType = 0 +0000000612 0xa430 CameraOwnerName = +0000000624 0xa431 BodySerialNumber = 053022005903 +0000000636 0xa432 LensSpecification = [50/1 (50.0), 50/1 (50.0), 0/1 (0.0), 0/1 (0.0)] +0000000648 0xa434 LensModel = EF50mm f/1.8 STM +0000000660 0xa435 LensSerialNumber = 0000214e1c + +---- Directory InteropIFD @ 9320 ---- +0000009322 0x0001 InteroperabilityIndex = R98 +0000009334 0x0002 InteroperabilityVersion = [0x30, 0x31, 0x30, 0x30] + +---- Directory GPS @ 9350 ---- +0000009352 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] + +---- Directory IFD1 @ 9368 ---- +0000009370 0x0103 Compression = 6 +0000009382 0x011a XResolution = 72/1 (72.0) +0000009394 0x011b YResolution = 72/1 (72.0) +0000009406 0x0128 ResolutionUnit = 2 +0000009418 0x0201 JpgFromRawStart = 9462 +0000009430 0x0202 JpgFromRawLength = 8567 + +---- Directory MakerNoteCanon @ 764 ---- +0000000766 0x0001 CanonCameraSettings = [49 shorts] +0000000778 0x0002 Unknown = [0, 50, 2838, 23076] +0000000790 0x0003 Unknown = [0, 0, 0, 0] +0000000802 0x0004 Unknown = [34 shorts] +0000000814 0x0006 CanonImageType = Canon EOS 70D +0000000826 0x0007 CanonFirmwareVersion = Firmware Version 1.1.1 +0000000838 0x0009 OwnerName = +0000000850 0x000d Unknown = [1536 bytes] +0000000862 0x0010 CanonModelID = -2147482843 +0000000874 0x0013 Unknown = [0, 159, 7, 112] +0000000886 0x0019 Unknown = 1 +0000000898 0x0026 Unknown = [139 shorts] +0000000910 0x0035 Unknown = [16, 0, 20, 0] +0000000922 0x0093 Unknown = [32 shorts] +0000000934 0x0095 LensModel = EF50mm f/1.8 STM +0000000946 0x0096 InternalSerialNumber = FA0381304 +0000000958 0x0097 Unknown = [1024 bytes] +0000000970 0x0098 Unknown = [0, 0, 0, 0] +0000000982 0x0099 Unknown = [116 ints] +0000000994 0x009a Unknown = [0, 5472, 3648, 0, 0] +0000001006 0x00a0 Unknown = [28, 0, 3, 0, 0, 0, 0, 0, -1, 5200, 135, 0, 0, 0] +0000001018 0x00aa Unknown = [12, 595, 1024, 1024, 515, 0] +0000001030 0x00b4 Unknown = 1 +0000001042 0x00d0 Unknown = 0 +0000001054 0x00e0 Unknown = [17 shorts] +0000001066 0x4001 Unknown = [1313 shorts] +0000001078 0x4008 Unknown = [135, 135, 135] +0000001090 0x4009 Unknown = [0, 0, 0] +0000001102 0x4010 Unknown = +0000001114 0x4011 Unknown = [252 bytes] +0000001126 0x4012 Unknown = +0000001138 0x4013 Unknown = [44, 0, 0, 10, -1, 0, 10, 0, 10, 0, 10] +0000001150 0x4015 Unknown = [456 bytes] +0000001162 0x4016 Unknown = [28, 0, 1, 0, 1, 0, 0] +0000001174 0x4018 Unknown = [28, 0, 0, 0, 0, 0, 1] +0000001186 0x4019 LensInfo = [30 bytes] +0000001198 0x4020 Unknown = [28, 0, 0, 0, 0, 2147483647, 0] +0000001210 0x4021 Unknown = [20, 0, 0, 0, 1] +0000001222 0x4024 Unknown = [53 ints] +0000001234 0x4025 Unknown = [36, 0, 0, 0, 0, 0, 0, 0, 0] +0000001246 0x4027 Unknown = [24, 524546, -1325400014, 134217728, 13684944, 65539] + +---- XMP ---- + + + + + + Igelstraße 45 + + + + + + + Igelstadt + Deutschland + + + Die Igelwiese + + + Niedersachsen + Igelstraße 45 + + + + + + + True + 1.1.0 + 0/1 + 0 + True + EF50mm f/1.8 II + 29 + True + + + + True + 1 + 0 + 0 + 0 + Adobe Standard + 1564A98C46E40037DB79C8C97BDEDC38 + +33 + 25 + 50 + 50 + 0 + False + 0 + 60 + 40 + 0 + 70 + 30 + +5 + -1.00 + 0 + 0 + 0 + False + True + -39 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 91738A0C4927BAFDC05FE184C12E1434 + 100 + 1 + Canon EOS 5D Mark II (Canon EF 50mm f1.8 II) - RAW.lcp + Adobe (Canon EF 50mm f/1.8 II) + LensDefaults + 100 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 34 + +7 + 75 + 0 + +16 + 50 + 25 + -14 + 0 + 0 + 0.0 + 100 + 0 + 0 + 0.00 + 0.00 + -8 + 50 + 0 + 50 + 0 + 1 + 6.7 + _MG_2593.CR2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + +3 + 25 + 74 + +1.0 + 0 + 0 + 0 + 0 + 0 + 4900 + +4 + + + 0, 0 + 32, 22 + 64, 56 + 128, 128 + 192, 196 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + Medium Contrast + Strong Contrast + + + 0, 0 + 32, 16 + 64, 50 + 128, 128 + 192, 202 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + 0 + 0 + 0.5 + 0.5 + 35 + 0 + 0 + False + 6 + 151388160 + 9.12 + +19 + 0 + 0 + + + + + + photo of a grey cat with orange eyes over a plain background + + + image/jpeg + + + + + + + + animal + hedgehog + mammal + porcupine + rodent + + + + + + + + + + + 35753/10653 + 2015-10-11T14:41:44 + 0230 + 0/1 + 1/60 + 16/5 + 50/1 + 80 + 56/1 + 0 + 53,35.72066667N + 9,56.49733333E + WGS-84 + 2.3.0.0 + + + 400 + + + 0 + 2 + 6/1 + + + + 1850746011 + EF50mm f/1.8 STM + + + 50/1 + 50/1 + 0/0 + 0/0 + + + 100 + + + + Igelstadt + 3 + Deutschland + 2018-05-17T19:44:17.200 + + + 871ABA18D31FD8E7DBCC53B9FE0224AF + FD7181A14C33CB21D9F24DFA009838BB + adobe:docid:photoshop:12be8701-ee83-11dc-8fa4-839a83b75f76 + adobe:docid:photoshop:8e134c0c-d987-11e1-8180-e5485f4b3dd6 + adobe:docid:photoshop:b431105b-06cd-11e8-871a-e51073a125a5 + uuid:7482E5E1C880E2118C5CA233DA119F04 + uuid:B817E0D43CEFDB11B569A5BC76F1A641 + uuid:F29EE4DF7EE8DC118DF8881DDBB15AA6 + uuid:F5473D8EC2CFDD11A615E91EF51C8E6B + uuid:e6789bf8-372e-4f3f-9a32-51adbe529a51 + xmp.did:026DA6464E99E5118955C48E323C1370 + xmp.did:04BFFCF3DA20E411A80BEFF385C528EF + xmp.did:05BFFCF3DA20E411A80BEFF385C528EF + xmp.did:06BFFCF3DA20E411A80BEFF385C528EF + xmp.did:15E498DDD1BCE3118479C8D66754C651 + xmp.did:1BE35DF84721E411BCDC879249A1E379 + xmp.did:1CE35DF84721E411BCDC879249A1E379 + xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d + xmp.did:1edd63cf-63f1-be43-8eb6-28739a04fc34 + xmp.did:2A536F8FF323E4119256983A0A8E27F4 + xmp.did:2B536F8FF323E4119256983A0A8E27F4 + xmp.did:3277AEDEF242E611A6CA9D14FBC23D21 + xmp.did:345F41AC61FFE511984BD03C261E519F + xmp.did:38E03B705845E4119D63AC8F7240C674 + xmp.did:676074CE1267E2118E9F83D25945345A + xmp.did:72319FB1F844E41190628966A279BD7B + xmp.did:7DAF784D0E67E211B5DF870CB1273C7A + xmp.did:93B00518BC9AE411B0F7CA6000FB75A5 + xmp.did:9D0D9797999EE41193BFE3E162C5B50C + xmp.did:A65843342923E411A15FDD5EB829D6CF + xmp.did:B644D45FBBBCE1119D66D9D8E4A4AB2E + xmp.did:B7A1306DA368E21194B2DCB767C38B70 + xmp.did:B844D45FBBBCE1119D66D9D8E4A4AB2E + xmp.did:BA19A591633FE6118B589AE61772D815 + xmp.did:CD0B892B2DA7E411B204F4CC894F2836 + xmp.did:D35C2DD9103FE611887695DCDE94486C + xmp.did:E2465DCDA944E411B6E28C01EC3A081F + xmp.did:E6465DCDA944E411B6E28C01EC3A081F + xmp.did:E679195AAFC3E511B30DF07EB0FADE24 + xmp.did:E7368B9DDBD6E4118EDED9318DFC5458 + xmp.did:FC05A09BD220E4118462AF7374FB7815 + + + Adobe RGB (1998) + Niedersachsen + + + + Canon + Canon EOS 70D + 1 + 72/1 + 72/1 + + + + 2015-10-11T14:41:44 + Adobe Photoshop CC 2017 (Windows) + + 2025-01-22T15:35:12.180Z + 2015-10-11T14:41:44 + 4 + + + + + xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d + xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117 + CBD5B8C3D30C0B13434B30B971EBF9DA + + E9EC4E99-E201-4440-8D8E-B14E7776148D + + + + derived + converted from image/x-canon-cr2 to image/tiff + + + saved + / + xmp.iid:1edd63cf-63f1-be43-8eb6-28739a04fc34 + Adobe Photoshop Camera Raw 9.12 (Windows) + 2018-05-18T11:54:23+02:00 + + + saved + / + xmp.iid:213d0dd5-b1d2-ea41-bd05-7e1fea066277 + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:11:10+02:00 + + + converted + from image/tiff to application/vnd.adobe.photoshop + + + derived + converted from image/tiff to application/vnd.adobe.photoshop + + + saved + / + xmp.iid:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:11:10+02:00 + + + saved + / + xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117 + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:12:44+02:00 + + + converted + from application/vnd.adobe.photoshop to image/jpeg + + + derived + converted from application/vnd.adobe.photoshop to image/jpeg + + + saved + / + xmp.iid:a330c3fb-4e2f-f948-bd00-04e86112dfd9 + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:12:44+02:00 + + + + xmp.iid:A944B6DB-7704-4449-82BD-83D3C861D070 + E9EC4E99-E201-4440-8D8E-B14E7776148D + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_87.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_87.txt new file mode 100644 index 00000000..68c72657 --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_87.txt @@ -0,0 +1,134 @@ +File format : AVIF +Resolution : null +---- TIFF ---- +Version 42 +Little-endian (Intel, II) +---- Directory IFD0 @ 8 ---- +0000000010 0x010f Make = Canon +0000000022 0x0110 Model = Canon EOS 70D +0000000034 0x0112 Orientation = 1 +0000000046 0x011a XResolution = 72/1 (72.0) +0000000058 0x011b YResolution = 72/1 (72.0) +0000000070 0x0128 ResolutionUnit = 2 +0000000082 0x0132 ModifyDate = 2015:10:11 14:41:44 +0000000094 0x013b Artist = +0000000106 0x0213 YCbCrPositioning = 2 +0000000118 0x8298 Copyright = +0000000130 0x8769 ExifOffset = 214 +0000000142 0x8825 GPSInfo = 9350 + +---- Directory ExifIFD @ 214 ---- +0000000216 0x829a ExposureTime = 1/60 (0.016667) +0000000228 0x829d FNumber = 32/10 (3.2) +0000000240 0x8822 ExposureProgram = 2 +0000000252 0x8827 ISO = 400 +0000000264 0x8830 SensitivityType = 2 +0000000276 0x8832 RecommendedExposureIndex = 400 +0000000288 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x30] +0000000300 0x9003 DateTimeOriginal = 2015:10:11 14:41:44 +0000000312 0x9004 DateTimeDigitized = 2015:10:11 14:41:44 +0000000324 0x9101 ComponentsConfiguration = [0x01, 0x02, 0x03, 0x00] +0000000336 0x9201 ShutterSpeedValue = 393216/65536 (6.0) +0000000348 0x9202 ApertureValue = 221184/65536 (3.375) +0000000360 0x9204 ExposureCompensation = 0/1 (0.0) +0000000372 0x9207 MeteringMode = 5 +0000000384 0x9209 Flash = 16 +0000000396 0x920a FocalLength = 50/1 (50.0) +0000000408 0x927c MakerNote = [8200 bytes] +0000000420 0x9286 UserComment = +0000000432 0x9290 SubSecTime = 00 +0000000444 0x9291 SubSecTimeOriginal = 00 +0000000456 0x9292 SubSecTimeDigitized = 00 +0000000468 0xa000 FlashpixVersion = [0x30, 0x31, 0x30, 0x30] +0000000480 0xa001 ColorSpace = 1 +0000000492 0xa002 ExifImageWidth = 5472 +0000000504 0xa003 ExifImageHeight = 3648 +0000000516 0xa005 InteropOffset = 9320 +0000000528 0xa20e FocalPlaneXResolution = 5472000/899 (6086.76307) +0000000540 0xa20f FocalPlaneYResolution = 3648000/599 (6090.15025) +0000000552 0xa210 FocalPlaneResolutionUnit = 2 +0000000564 0xa401 CustomRendered = 0 +0000000576 0xa402 ExposureMode = 0 +0000000588 0xa403 WhiteBalance = 0 +0000000600 0xa406 SceneCaptureType = 0 +0000000612 0xa430 CameraOwnerName = +0000000624 0xa431 BodySerialNumber = 053022005903 +0000000636 0xa432 LensSpecification = [50/1 (50.0), 50/1 (50.0), 0/1 (0.0), 0/1 (0.0)] +0000000648 0xa434 LensModel = EF50mm f/1.8 STM +0000000660 0xa435 LensSerialNumber = 0000214e1c + +---- Directory InteropIFD @ 9320 ---- +0000009322 0x0001 InteroperabilityIndex = R98 +0000009334 0x0002 InteroperabilityVersion = [0x30, 0x31, 0x30, 0x30] + +---- Directory GPS @ 9350 ---- +0000009352 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] + +---- Directory IFD1 @ 9368 ---- +0000009370 0x0103 Compression = 6 +0000009382 0x011a XResolution = 72/1 (72.0) +0000009394 0x011b YResolution = 72/1 (72.0) +0000009406 0x0128 ResolutionUnit = 2 +0000009418 0x0201 JpgFromRawStart = 9462 +0000009430 0x0202 JpgFromRawLength = 8567 + +---- Directory MakerNoteCanon @ 764 ---- +0000000766 0x0001 CanonCameraSettings = [49 shorts] +0000000778 0x0002 Unknown = [0, 50, 2838, 23076] +0000000790 0x0003 Unknown = [0, 0, 0, 0] +0000000802 0x0004 Unknown = [34 shorts] +0000000814 0x0006 CanonImageType = Canon EOS 70D +0000000826 0x0007 CanonFirmwareVersion = Firmware Version 1.1.1 +0000000838 0x0009 OwnerName = +0000000850 0x000d Unknown = [1536 bytes] +0000000862 0x0010 CanonModelID = -2147482843 +0000000874 0x0013 Unknown = [0, 159, 7, 112] +0000000886 0x0019 Unknown = 1 +0000000898 0x0026 Unknown = [139 shorts] +0000000910 0x0035 Unknown = [16, 0, 20, 0] +0000000922 0x0093 Unknown = [32 shorts] +0000000934 0x0095 LensModel = EF50mm f/1.8 STM +0000000946 0x0096 InternalSerialNumber = FA0381304 +0000000958 0x0097 Unknown = [1024 bytes] +0000000970 0x0098 Unknown = [0, 0, 0, 0] +0000000982 0x0099 Unknown = [116 ints] +0000000994 0x009a Unknown = [0, 5472, 3648, 0, 0] +0000001006 0x00a0 Unknown = [28, 0, 3, 0, 0, 0, 0, 0, -1, 5200, 135, 0, 0, 0] +0000001018 0x00aa Unknown = [12, 595, 1024, 1024, 515, 0] +0000001030 0x00b4 Unknown = 1 +0000001042 0x00d0 Unknown = 0 +0000001054 0x00e0 Unknown = [17 shorts] +0000001066 0x4001 Unknown = [1313 shorts] +0000001078 0x4008 Unknown = [135, 135, 135] +0000001090 0x4009 Unknown = [0, 0, 0] +0000001102 0x4010 Unknown = +0000001114 0x4011 Unknown = [252 bytes] +0000001126 0x4012 Unknown = +0000001138 0x4013 Unknown = [44, 0, 0, 10, -1, 0, 10, 0, 10, 0, 10] +0000001150 0x4015 Unknown = [456 bytes] +0000001162 0x4016 Unknown = [28, 0, 1, 0, 1, 0, 0] +0000001174 0x4018 Unknown = [28, 0, 0, 0, 0, 0, 1] +0000001186 0x4019 LensInfo = [30 bytes] +0000001198 0x4020 Unknown = [28, 0, 0, 0, 0, 2147483647, 0] +0000001210 0x4021 Unknown = [20, 0, 0, 0, 1] +0000001222 0x4024 Unknown = [53 ints] +0000001234 0x4025 Unknown = [36, 0, 0, 0, 0, 0, 0, 0, 0] +0000001246 0x4027 Unknown = [24, 524546, -1325400014, 134217728, 13684944, 65539] + +---- XMP ---- + + + + + 3 + + + Animated AVIF with XMP in top-level UUID box + + + + + + diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_88.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_88.txt new file mode 100644 index 00000000..5cbc2f33 --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_88.txt @@ -0,0 +1,134 @@ +File format : AVIF +Resolution : null +---- TIFF ---- +Version 42 +Little-endian (Intel, II) +---- Directory IFD0 @ 8 ---- +0000000010 0x010f Make = Canon +0000000022 0x0110 Model = Canon EOS 70D +0000000034 0x0112 Orientation = 1 +0000000046 0x011a XResolution = 72/1 (72.0) +0000000058 0x011b YResolution = 72/1 (72.0) +0000000070 0x0128 ResolutionUnit = 2 +0000000082 0x0132 ModifyDate = 2015:10:11 14:41:44 +0000000094 0x013b Artist = +0000000106 0x0213 YCbCrPositioning = 2 +0000000118 0x8298 Copyright = +0000000130 0x8769 ExifOffset = 214 +0000000142 0x8825 GPSInfo = 9350 + +---- Directory ExifIFD @ 214 ---- +0000000216 0x829a ExposureTime = 1/60 (0.016667) +0000000228 0x829d FNumber = 32/10 (3.2) +0000000240 0x8822 ExposureProgram = 2 +0000000252 0x8827 ISO = 400 +0000000264 0x8830 SensitivityType = 2 +0000000276 0x8832 RecommendedExposureIndex = 400 +0000000288 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x30] +0000000300 0x9003 DateTimeOriginal = 2015:10:11 14:41:44 +0000000312 0x9004 DateTimeDigitized = 2015:10:11 14:41:44 +0000000324 0x9101 ComponentsConfiguration = [0x01, 0x02, 0x03, 0x00] +0000000336 0x9201 ShutterSpeedValue = 393216/65536 (6.0) +0000000348 0x9202 ApertureValue = 221184/65536 (3.375) +0000000360 0x9204 ExposureCompensation = 0/1 (0.0) +0000000372 0x9207 MeteringMode = 5 +0000000384 0x9209 Flash = 16 +0000000396 0x920a FocalLength = 50/1 (50.0) +0000000408 0x927c MakerNote = [8200 bytes] +0000000420 0x9286 UserComment = +0000000432 0x9290 SubSecTime = 00 +0000000444 0x9291 SubSecTimeOriginal = 00 +0000000456 0x9292 SubSecTimeDigitized = 00 +0000000468 0xa000 FlashpixVersion = [0x30, 0x31, 0x30, 0x30] +0000000480 0xa001 ColorSpace = 1 +0000000492 0xa002 ExifImageWidth = 5472 +0000000504 0xa003 ExifImageHeight = 3648 +0000000516 0xa005 InteropOffset = 9320 +0000000528 0xa20e FocalPlaneXResolution = 5472000/899 (6086.76307) +0000000540 0xa20f FocalPlaneYResolution = 3648000/599 (6090.15025) +0000000552 0xa210 FocalPlaneResolutionUnit = 2 +0000000564 0xa401 CustomRendered = 0 +0000000576 0xa402 ExposureMode = 0 +0000000588 0xa403 WhiteBalance = 0 +0000000600 0xa406 SceneCaptureType = 0 +0000000612 0xa430 CameraOwnerName = +0000000624 0xa431 BodySerialNumber = 053022005903 +0000000636 0xa432 LensSpecification = [50/1 (50.0), 50/1 (50.0), 0/1 (0.0), 0/1 (0.0)] +0000000648 0xa434 LensModel = EF50mm f/1.8 STM +0000000660 0xa435 LensSerialNumber = 0000214e1c + +---- Directory InteropIFD @ 9320 ---- +0000009322 0x0001 InteroperabilityIndex = R98 +0000009334 0x0002 InteroperabilityVersion = [0x30, 0x31, 0x30, 0x30] + +---- Directory GPS @ 9350 ---- +0000009352 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00] + +---- Directory IFD1 @ 9368 ---- +0000009370 0x0103 Compression = 6 +0000009382 0x011a XResolution = 72/1 (72.0) +0000009394 0x011b YResolution = 72/1 (72.0) +0000009406 0x0128 ResolutionUnit = 2 +0000009418 0x0201 JpgFromRawStart = 9462 +0000009430 0x0202 JpgFromRawLength = 8567 + +---- Directory MakerNoteCanon @ 764 ---- +0000000766 0x0001 CanonCameraSettings = [49 shorts] +0000000778 0x0002 Unknown = [0, 50, 2838, 23076] +0000000790 0x0003 Unknown = [0, 0, 0, 0] +0000000802 0x0004 Unknown = [34 shorts] +0000000814 0x0006 CanonImageType = Canon EOS 70D +0000000826 0x0007 CanonFirmwareVersion = Firmware Version 1.1.1 +0000000838 0x0009 OwnerName = +0000000850 0x000d Unknown = [1536 bytes] +0000000862 0x0010 CanonModelID = -2147482843 +0000000874 0x0013 Unknown = [0, 159, 7, 112] +0000000886 0x0019 Unknown = 1 +0000000898 0x0026 Unknown = [139 shorts] +0000000910 0x0035 Unknown = [16, 0, 20, 0] +0000000922 0x0093 Unknown = [32 shorts] +0000000934 0x0095 LensModel = EF50mm f/1.8 STM +0000000946 0x0096 InternalSerialNumber = FA0381304 +0000000958 0x0097 Unknown = [1024 bytes] +0000000970 0x0098 Unknown = [0, 0, 0, 0] +0000000982 0x0099 Unknown = [116 ints] +0000000994 0x009a Unknown = [0, 5472, 3648, 0, 0] +0000001006 0x00a0 Unknown = [28, 0, 3, 0, 0, 0, 0, 0, -1, 5200, 135, 0, 0, 0] +0000001018 0x00aa Unknown = [12, 595, 1024, 1024, 515, 0] +0000001030 0x00b4 Unknown = 1 +0000001042 0x00d0 Unknown = 0 +0000001054 0x00e0 Unknown = [17 shorts] +0000001066 0x4001 Unknown = [1313 shorts] +0000001078 0x4008 Unknown = [135, 135, 135] +0000001090 0x4009 Unknown = [0, 0, 0] +0000001102 0x4010 Unknown = +0000001114 0x4011 Unknown = [252 bytes] +0000001126 0x4012 Unknown = +0000001138 0x4013 Unknown = [44, 0, 0, 10, -1, 0, 10, 0, 10, 0, 10] +0000001150 0x4015 Unknown = [456 bytes] +0000001162 0x4016 Unknown = [28, 0, 1, 0, 1, 0, 0] +0000001174 0x4018 Unknown = [28, 0, 0, 0, 0, 0, 1] +0000001186 0x4019 LensInfo = [30 bytes] +0000001198 0x4020 Unknown = [28, 0, 0, 0, 0, 2147483647, 0] +0000001210 0x4021 Unknown = [20, 0, 0, 0, 1] +0000001222 0x4024 Unknown = [53 ints] +0000001234 0x4025 Unknown = [36, 0, 0, 0, 0, 0, 0, 0, 0] +0000001246 0x4027 Unknown = [24, 524546, -1325400014, 134217728, 13684944, 65539] + +---- XMP ---- + + + + + 4 + + + Animated AVIF with XMP in UUID box inside moov + + + + + + \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_9.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_9.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_9.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_9.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/.gitattributes similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/.gitattributes rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/.gitattributes diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample.xmp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample.xmp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample_mod.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample_mod.xmp similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample_mod.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample_mod.xmp index ef799c46..16e32b24 100644 --- a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample_mod.xmp +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample_mod.xmp @@ -1,5 +1,5 @@ - + - + - + + + + + + Igelstraße 45 + + + + + + + Igelstadt + Deutschland + + + Die Igelwiese + + + Niedersachsen + Igelstraße 45 + + + + + + + True + 1.1.0 + 0/1 + 0 + True + EF50mm f/1.8 II + 29 + True + + + + True + 1 + 0 + 0 + 0 + Adobe Standard + 1564A98C46E40037DB79C8C97BDEDC38 + +33 + 25 + 50 + 50 + 0 + False + 0 + 60 + 40 + 0 + 70 + 30 + +5 + -1.00 + 0 + 0 + 0 + False + True + -39 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 91738A0C4927BAFDC05FE184C12E1434 + 100 + 1 + Canon EOS 5D Mark II (Canon EF 50mm f1.8 II) - RAW.lcp + Adobe (Canon EF 50mm f/1.8 II) + LensDefaults + 100 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + 34 + +7 + 75 + 0 + +16 + 50 + 25 + -14 + 0 + 0 + 0.0 + 100 + 0 + 0 + 0.00 + 0.00 + -8 + 50 + 0 + 50 + 0 + 1 + 6.7 + _MG_2593.CR2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + +3 + 25 + 74 + +1.0 + 0 + 0 + 0 + 0 + 0 + 4900 + +4 + + + 0, 0 + 32, 22 + 64, 56 + 128, 128 + 192, 196 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + Medium Contrast + Strong Contrast + + + 0, 0 + 32, 16 + 64, 50 + 128, 128 + 192, 202 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + + + 0, 0 + 255, 255 + + + 0 + 0 + 0.5 + 0.5 + 35 + 0 + 0 + False + 6 + 151388160 + 9.12 + +19 + 0 + 0 + + + + + + photo of a grey cat with orange eyes over a plain background + + + image/jpeg + + + + + + + + animal + hedgehog + mammal + porcupine + rodent + + + + + + + + + + + 35753/10653 + 2015-10-11T14:41:44 + 0230 + 0/1 + 1/60 + 16/5 + 50/1 + 80 + 56/1 + 0 + 53,35.72066667N + 9,56.49733333E + WGS-84 + 2.3.0.0 + + + 400 + + + 0 + 2 + 6/1 + + + + 1850746011 + EF50mm f/1.8 STM + + + 50/1 + 50/1 + 0/0 + 0/0 + + + 100 + + + + Igelstadt + 3 + Deutschland + 2018-05-17T19:44:17.200 + + + 871ABA18D31FD8E7DBCC53B9FE0224AF + FD7181A14C33CB21D9F24DFA009838BB + adobe:docid:photoshop:12be8701-ee83-11dc-8fa4-839a83b75f76 + adobe:docid:photoshop:8e134c0c-d987-11e1-8180-e5485f4b3dd6 + adobe:docid:photoshop:b431105b-06cd-11e8-871a-e51073a125a5 + uuid:7482E5E1C880E2118C5CA233DA119F04 + uuid:B817E0D43CEFDB11B569A5BC76F1A641 + uuid:F29EE4DF7EE8DC118DF8881DDBB15AA6 + uuid:F5473D8EC2CFDD11A615E91EF51C8E6B + uuid:e6789bf8-372e-4f3f-9a32-51adbe529a51 + xmp.did:026DA6464E99E5118955C48E323C1370 + xmp.did:04BFFCF3DA20E411A80BEFF385C528EF + xmp.did:05BFFCF3DA20E411A80BEFF385C528EF + xmp.did:06BFFCF3DA20E411A80BEFF385C528EF + xmp.did:15E498DDD1BCE3118479C8D66754C651 + xmp.did:1BE35DF84721E411BCDC879249A1E379 + xmp.did:1CE35DF84721E411BCDC879249A1E379 + xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d + xmp.did:1edd63cf-63f1-be43-8eb6-28739a04fc34 + xmp.did:2A536F8FF323E4119256983A0A8E27F4 + xmp.did:2B536F8FF323E4119256983A0A8E27F4 + xmp.did:3277AEDEF242E611A6CA9D14FBC23D21 + xmp.did:345F41AC61FFE511984BD03C261E519F + xmp.did:38E03B705845E4119D63AC8F7240C674 + xmp.did:676074CE1267E2118E9F83D25945345A + xmp.did:72319FB1F844E41190628966A279BD7B + xmp.did:7DAF784D0E67E211B5DF870CB1273C7A + xmp.did:93B00518BC9AE411B0F7CA6000FB75A5 + xmp.did:9D0D9797999EE41193BFE3E162C5B50C + xmp.did:A65843342923E411A15FDD5EB829D6CF + xmp.did:B644D45FBBBCE1119D66D9D8E4A4AB2E + xmp.did:B7A1306DA368E21194B2DCB767C38B70 + xmp.did:B844D45FBBBCE1119D66D9D8E4A4AB2E + xmp.did:BA19A591633FE6118B589AE61772D815 + xmp.did:CD0B892B2DA7E411B204F4CC894F2836 + xmp.did:D35C2DD9103FE611887695DCDE94486C + xmp.did:E2465DCDA944E411B6E28C01EC3A081F + xmp.did:E6465DCDA944E411B6E28C01EC3A081F + xmp.did:E679195AAFC3E511B30DF07EB0FADE24 + xmp.did:E7368B9DDBD6E4118EDED9318DFC5458 + xmp.did:FC05A09BD220E4118462AF7374FB7815 + + + Adobe RGB (1998) + Niedersachsen + + + + Canon + Canon EOS 70D + 1 + 72/1 + 72/1 + + + + 2015-10-11T14:41:44 + Adobe Photoshop CC 2017 (Windows) + + 2025-01-22T15:35:12.180Z + 2015-10-11T14:41:44 + 4 + + + + + xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d + xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117 + CBD5B8C3D30C0B13434B30B971EBF9DA + + E9EC4E99-E201-4440-8D8E-B14E7776148D + + + + derived + converted from image/x-canon-cr2 to image/tiff + + + saved + / + xmp.iid:1edd63cf-63f1-be43-8eb6-28739a04fc34 + Adobe Photoshop Camera Raw 9.12 (Windows) + 2018-05-18T11:54:23+02:00 + + + saved + / + xmp.iid:213d0dd5-b1d2-ea41-bd05-7e1fea066277 + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:11:10+02:00 + + + converted + from image/tiff to application/vnd.adobe.photoshop + + + derived + converted from image/tiff to application/vnd.adobe.photoshop + + + saved + / + xmp.iid:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:11:10+02:00 + + + saved + / + xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117 + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:12:44+02:00 + + + converted + from application/vnd.adobe.photoshop to image/jpeg + + + derived + converted from application/vnd.adobe.photoshop to image/jpeg + + + saved + / + xmp.iid:a330c3fb-4e2f-f948-bd00-04e86112dfd9 + Adobe Photoshop CC 2017 (Windows) + 2018-05-18T12:12:44+02:00 + + + + xmp.iid:A944B6DB-7704-4449-82BD-83D3C861D070 + E9EC4E99-E201-4440-8D8E-B14E7776148D + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_87.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_87.xmp new file mode 100644 index 00000000..cf92fbfd --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_87.xmp @@ -0,0 +1,16 @@ + + + + + 3 + + + Animated AVIF with XMP in top-level UUID box + + + + + + diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_88.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_88.xmp new file mode 100644 index 00000000..f84a5728 --- /dev/null +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_88.xmp @@ -0,0 +1,16 @@ + + + + + 4 + + + Animated AVIF with XMP in UUID box inside moov + + + + + + \ No newline at end of file diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_8_formatted.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_8_formatted.xmp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_8_formatted.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_8_formatted.xmp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9.xmp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9.xmp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9_formatted.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9_formatted.xmp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9_formatted.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9_formatted.xmp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample.xmp similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample.xmp diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample_mod.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample_mod.xmp similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample_mod.xmp rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample_mod.xmp index ba04e5cd..d8ca8536 100644 --- a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample_mod.xmp +++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample_mod.xmp @@ -1,5 +1,5 @@ - + - + - + + + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif index 84377d96..a8a527b2 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif.txt similarity index 95% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif.txt index c98544d3..d34e991c 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif.txt @@ -1,7 +1,7 @@ File format : GIF Resolution : 500 x 333 ---- XMP ---- - + + + + + + + + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif index 5645fdf3..ea415029 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif.txt similarity index 96% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif.txt index fe66ddfb..3908d779 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif.txt @@ -1,7 +1,7 @@ File format : GIF Resolution : 500 x 333 ---- XMP ---- - + + + + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif index 3ec4966b..826966f2 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif.txt similarity index 93% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif.txt index 9af13443..ef826c4b 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif.txt @@ -1,7 +1,7 @@ File format : GIF Resolution : 500 x 333 ---- XMP ---- - + + + + + + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/no_metadata.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/no_metadata.gif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/no_metadata.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/no_metadata.gif diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/original.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/original.gif similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/original.gif rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/original.gif diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/.gitattributes similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/.gitattributes rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/.gitattributes diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg index 2fe6a313..68aa58cd 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg.txt similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg.txt index 9ade7b24..187d6028 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg.txt @@ -132,7 +132,7 @@ Keywords (25) = 'people' ---- XMP ---- - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg index 852d0b6c..aac44d5e 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg.txt similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg.txt index 501555cc..e0a876eb 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg.txt @@ -135,7 +135,7 @@ Keywords (25) = 'people' ---- XMP ---- - + - + - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg index 747646ee..b02ff41b 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg.txt similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg.txt index bab71d56..9665e064 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg.txt @@ -139,7 +139,7 @@ Keywords (25) = 'people' ---- XMP ---- - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg index 0160afdd..b10c7068 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg.txt similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg.txt index fc6bcd88..41915599 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg.txt @@ -135,7 +135,7 @@ Keywords (25) = 'people' ---- XMP ---- - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/no_metadata.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/no_metadata.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/no_metadata.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/no_metadata.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.debug_notes.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.debug_notes.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.debug_notes.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.debug_notes.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg.txt similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg.txt diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg index 106832a7..2d90057b 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg.txt similarity index 98% rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg.txt index e79ecd0a..5c8f8995 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg.txt @@ -135,7 +135,7 @@ Keywords (25) = 'people' ---- XMP ---- - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_flagged.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_flagged.jxl similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_flagged.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_flagged.jxl index b9d3a885..332760f2 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_flagged.jxl and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_flagged.jxl differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_flagged.jxl.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_flagged.jxl.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_flagged.jxl.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_flagged.jxl.txt index 69b76c27..109f5aec 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_flagged.jxl.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_flagged.jxl.txt @@ -61,7 +61,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + - + - + - + - + - + diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_location_shown.jxl similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_location_shown.jxl index 298bbc2f..1f24e1a4 100644 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.jxl and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_location_shown.jxl differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.jxl.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_location_shown.jxl.txt similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.jxl.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_location_shown.jxl.txt index 38a3d9bf..f760d597 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.jxl.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_location_shown.jxl.txt @@ -61,7 +61,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_rating.jxl similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_rating.jxl index dd5d3365..e7a4fae9 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.jxl and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_rating.jxl differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.jxl.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_rating.jxl.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.jxl.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_rating.jxl.txt index 057374bb..ed8f3334 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.jxl.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/new_rating.jxl.txt @@ -61,7 +61,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/no_metadata.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/no_metadata.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jxl/no_metadata.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/no_metadata.jxl diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/original.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/original.jxl similarity index 100% rename from src/commonTest/resources/com/ashampoo/kim/updates_jxl/original.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/original.jxl diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/rotated_right.jxl similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.jxl rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/rotated_right.jxl index 392ed9b6..d62d3c3c 100644 Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.jxl and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/rotated_right.jxl differ diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.jxl.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/rotated_right.jxl.txt similarity index 99% rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.jxl.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/rotated_right.jxl.txt index c13f4dd3..713d8401 100644 --- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.jxl.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jxl/rotated_right.jxl.txt @@ -62,7 +62,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_description.png b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_description.png similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_description.png rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_description.png index 4fdffea7..6117dba9 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_description.png and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_description.png differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_description.png.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_description.png.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_description.png.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_description.png.txt index 7a39dd37..11e17df3 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_description.png.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_description.png.txt @@ -130,7 +130,7 @@ Time Created (60) = '15:28:58-15:28' ---- XMP ---- - + - + - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_keywords.png b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_keywords.png similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_keywords.png rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_keywords.png index b9860e49..e010708a 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_keywords.png and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_keywords.png differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_keywords.png.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_keywords.png.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_keywords.png.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_keywords.png.txt index d191da6f..985a55ff 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_keywords.png.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_keywords.png.txt @@ -130,7 +130,7 @@ Time Created (60) = '15:28:58-15:28' ---- XMP ---- - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_persons.png b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_persons.png similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_persons.png rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_persons.png index 47631983..a66ed460 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_persons.png and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_persons.png differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_persons.png.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_persons.png.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_persons.png.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_persons.png.txt index c1c79ae9..74afcf5a 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_persons.png.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_persons.png.txt @@ -130,7 +130,7 @@ Time Created (60) = '15:28:58-15:28' ---- XMP ---- - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_title.png b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_title.png similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_title.png rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_title.png index af70599e..1317593f 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_title.png and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_title.png differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_title.png.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_title.png.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_png/new_title.png.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_title.png.txt index bf453e79..f49d0637 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_png/new_title.png.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_png/new_title.png.txt @@ -130,7 +130,7 @@ Time Created (60) = '15:28:58-15:28' ---- XMP ---- - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_description.webp b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_description.webp similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_description.webp rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_description.webp index 6022110c..93f4ce8e 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_description.webp and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_description.webp differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_description.webp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_description.webp.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_description.webp.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_description.webp.txt index aceaad7c..b5c642e0 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_description.webp.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_description.webp.txt @@ -63,7 +63,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_keywords.webp b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_keywords.webp similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_keywords.webp rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_keywords.webp index d19c9cfa..f5110f78 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_keywords.webp and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_keywords.webp differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_keywords.webp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_keywords.webp.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_keywords.webp.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_keywords.webp.txt index d78620d6..ca9acabc 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_keywords.webp.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_keywords.webp.txt @@ -62,7 +62,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_persons.webp b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_persons.webp similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_persons.webp rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_persons.webp index dd1885ad..1cd0baa5 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_persons.webp and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_persons.webp differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_persons.webp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_persons.webp.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_persons.webp.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_persons.webp.txt index ea997cc0..9936b28d 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_persons.webp.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_persons.webp.txt @@ -62,7 +62,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + - + - + - + diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_title.webp b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_title.webp similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_title.webp rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_title.webp index e9326709..d11b89fd 100644 Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_title.webp and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_title.webp differ diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_title.webp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_title.webp.txt similarity index 99% rename from src/commonTest/resources/com/ashampoo/kim/updates_webp/new_title.webp.txt rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_title.webp.txt index 917ff839..2c507b7a 100644 --- a/src/commonTest/resources/com/ashampoo/kim/updates_webp/new_title.webp.txt +++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_webp/new_title.webp.txt @@ -62,7 +62,7 @@ Little-endian (Intel, II) ---- XMP ---- - + - + - + ")), // MetadataUpdate.Faces(mapOf("John" to RegionArea(0.2, 0.3, 0.4, 0.5))), MetadataUpdate.Persons(setOf("John")) diff --git a/src/jvmTest/kotlin/com/ashampoo/kim/input/KotlinIoPathSourceTest.kt b/src/jvmTest/kotlin/de/stefan_oltmann/kim/input/KotlinIoPathSourceTest.kt similarity index 74% rename from src/jvmTest/kotlin/com/ashampoo/kim/input/KotlinIoPathSourceTest.kt rename to src/jvmTest/kotlin/de/stefan_oltmann/kim/input/KotlinIoPathSourceTest.kt index b46cb89f..8d20c674 100644 --- a/src/jvmTest/kotlin/com/ashampoo/kim/input/KotlinIoPathSourceTest.kt +++ b/src/jvmTest/kotlin/de/stefan_oltmann/kim/input/KotlinIoPathSourceTest.kt @@ -1,4 +1,5 @@ /* + * Copyright 2026 Stefan Oltmann * Copyright 2025 Ashampoo GmbH & Co. KG * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,11 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input -import com.ashampoo.kim.Kim -import com.ashampoo.kim.kotlinx.readMetadata -import com.ashampoo.kim.testdata.KimTestData +import com.goncalossilva.resources.Resource +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.kotlinx.readMetadata +import de.stefan_oltmann.kim.testdata.KimTestData import kotlinx.io.files.Path import kotlin.test.Test import kotlin.test.assertTrue @@ -27,6 +29,9 @@ import kotlin.test.assertTrue */ class KotlinIoPathSourceTest { + fun getFullImageDiskPath(index: Int): String = + Resource("src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/${KimTestData.getFileName(index)}").path + /** * Test to check that KotlinIoSourceByteReader works correctly. */ @@ -34,9 +39,9 @@ class KotlinIoPathSourceTest { @Test fun testToStringWithKotlinIoPath() { - for (index in 1..KimTestData.TEST_PHOTO_COUNT) { + for (index in 1..KimTestData.TEST_MEDIA_COUNT) { - val diskPath = KimTestData.getFullImageDiskPath(index) + val diskPath = getFullImageDiskPath(index) val metadata = Kim.readMetadata(Path(diskPath)) diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/input/KtorInputByteReader.kt b/src/ktorMain/kotlin/com/ashampoo/kim/input/KtorInputByteReader.kt deleted file mode 100644 index 9439728e..00000000 --- a/src/ktorMain/kotlin/com/ashampoo/kim/input/KtorInputByteReader.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim.input - -import io.ktor.utils.io.core.endOfInput -import io.ktor.utils.io.core.remaining -import kotlinx.io.Source -import kotlinx.io.readByteArray - -/** - * This class provides a convenient way to parse metadata directly from - * a Ktor HttpClient Input. It is particularly useful for parsing metadata - * of files hosted on a cloud service, which is a common use case. - */ -public class KtorInputByteReader( - private val source: Source -) : ByteReader { - - override val contentLength: Long = source.remaining - - override fun readByte(): Byte? = - if (source.endOfInput) null else source.readByte() - - override fun readBytes(count: Int): ByteArray = - source.readByteArray(minOf(count, source.remaining.toInt())) - - override fun close(): Unit = - source.close() -} diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt similarity index 97% rename from src/ktorMain/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt index da2d4ec4..630e52fe 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlinx.io.buffered import kotlinx.io.files.Path diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.ktor.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.ktor.kt similarity index 96% rename from src/ktorMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.ktor.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.ktor.kt index bac49241..6ccc5277 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.ktor.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.ktor.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import io.ktor.utils.io.charsets.Charsets import io.ktor.utils.io.charsets.decode diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/format/png/PngMetadataCopyUtil.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataCopyUtil.kt similarity index 92% rename from src/ktorMain/kotlin/com/ashampoo/kim/format/png/PngMetadataCopyUtil.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataCopyUtil.kt index 5edf4668..ec93adda 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/format/png/PngMetadataCopyUtil.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataCopyUtil.kt @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.format.png +package de.stefan_oltmann.kim.format.png -import com.ashampoo.kim.format.png.chunk.PngChunk -import com.ashampoo.kim.input.ByteArrayByteReader -import com.ashampoo.kim.input.KotlinIoSourceByteReader -import com.ashampoo.kim.output.ByteArrayByteWriter -import com.ashampoo.kim.output.KotlinIoSinkByteWriter +import de.stefan_oltmann.kim.format.png.chunk.PngChunk +import de.stefan_oltmann.kim.input.ByteArrayByteReader +import de.stefan_oltmann.kim.input.KotlinIoSourceByteReader +import de.stefan_oltmann.kim.output.ByteArrayByteWriter +import de.stefan_oltmann.kim.output.KotlinIoSinkByteWriter import kotlinx.io.files.Path import kotlinx.io.files.SystemFileSystem diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/input/KotlinIoSourceByteReader.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/input/KotlinIoSourceByteReader.kt similarity index 90% rename from src/ktorMain/kotlin/com/ashampoo/kim/input/KotlinIoSourceByteReader.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/input/KotlinIoSourceByteReader.kt index d7586eed..105b6d73 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/input/KotlinIoSourceByteReader.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/input/KotlinIoSourceByteReader.kt @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input -import com.ashampoo.kim.common.exists +import de.stefan_oltmann.kim.common.exists import kotlinx.io.Source import kotlinx.io.buffered import kotlinx.io.files.Path @@ -30,6 +30,10 @@ public class KotlinIoSourceByteReader( private var position = 0 + /* + * Attention: `Source.remaining` returns 0 for unbuffered or streaming sources, + * so we need this to be specified. + */ private val remainingByteCount: Int get() = (contentLength - position).toInt() diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/input/KtorByteReadChannelByteReader.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/input/KtorByteReadChannelByteReader.kt similarity index 98% rename from src/ktorMain/kotlin/com/ashampoo/kim/input/KtorByteReadChannelByteReader.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/input/KtorByteReadChannelByteReader.kt index 6e44716f..dba68590 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/input/KtorByteReadChannelByteReader.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/input/KtorByteReadChannelByteReader.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.input +package de.stefan_oltmann.kim.input import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.cancel diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/kotlinx/Kim.kotlinx.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/kotlinx/Kim.kotlinx.kt similarity index 72% rename from src/ktorMain/kotlin/com/ashampoo/kim/kotlinx/Kim.kotlinx.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/kotlinx/Kim.kotlinx.kt index afdcf2f5..1b44f6eb 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/kotlinx/Kim.kotlinx.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/kotlinx/Kim.kotlinx.kt @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.kotlinx +package de.stefan_oltmann.kim.kotlinx -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.common.tryWithImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.input.KotlinIoSourceByteReader +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.common.tryWithImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.input.KotlinIoSourceByteReader import kotlinx.io.files.Path import kotlin.jvm.JvmStatic @@ -31,7 +31,7 @@ public object KimKotlinx { @JvmStatic @OptIn(ExperimentalStdlibApi::class) @Throws(ImageReadException::class) - public fun readMetadata(path: Path): ImageMetadata? = tryWithImageReadException { + public fun readMetadata(path: Path): MediaMetadata? = tryWithImageReadException { KotlinIoSourceByteReader.read(path) { byteReader -> byteReader?.let { Kim.readMetadata(it) } @@ -41,5 +41,5 @@ public object KimKotlinx { @OptIn(ExperimentalStdlibApi::class) @Throws(ImageReadException::class) -public fun Kim.readMetadata(path: Path): ImageMetadata? = +public fun Kim.readMetadata(path: Path): MediaMetadata? = KimKotlinx.readMetadata(path) diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/ktor/KimKtor.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/ktor/KimKtor.kt similarity index 65% rename from src/ktorMain/kotlin/com/ashampoo/kim/ktor/KimKtor.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/ktor/KimKtor.kt index e4f050c6..864e9471 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/ktor/KimKtor.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/ktor/KimKtor.kt @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.ktor +package de.stefan_oltmann.kim.ktor -import com.ashampoo.kim.Kim -import com.ashampoo.kim.common.ImageReadException -import com.ashampoo.kim.format.ImageMetadata -import com.ashampoo.kim.input.KtorByteReadChannelByteReader -import com.ashampoo.kim.input.KtorInputByteReader +import de.stefan_oltmann.kim.Kim +import de.stefan_oltmann.kim.common.ImageReadException +import de.stefan_oltmann.kim.format.MediaMetadata +import de.stefan_oltmann.kim.input.KotlinIoSourceByteReader +import de.stefan_oltmann.kim.input.KtorByteReadChannelByteReader import io.ktor.utils.io.ByteReadChannel import kotlinx.io.Source import kotlin.jvm.JvmStatic @@ -31,19 +31,19 @@ public object KimKtor { @JvmStatic @Throws(ImageReadException::class) - public fun readMetadata(source: Source): ImageMetadata? = - Kim.readMetadata(KtorInputByteReader(source)) + public fun readMetadata(source: Source, contentLength: Long): MediaMetadata? = + Kim.readMetadata(KotlinIoSourceByteReader(source, contentLength)) @JvmStatic @Throws(ImageReadException::class) - public fun readMetadata(byteReadChannel: ByteReadChannel, contentLength: Long): ImageMetadata? = + public fun readMetadata(byteReadChannel: ByteReadChannel, contentLength: Long): MediaMetadata? = Kim.readMetadata(KtorByteReadChannelByteReader(byteReadChannel, contentLength)) } @Throws(ImageReadException::class) -public fun Kim.readMetadata(source: Source): ImageMetadata? = - KimKtor.readMetadata(source) +public fun Kim.readMetadata(source: Source, contentLength: Long): MediaMetadata? = + KimKtor.readMetadata(source, contentLength) @Throws(ImageReadException::class) -public fun Kim.readMetadata(byteReadChannel: ByteReadChannel, contentLength: Long): ImageMetadata? = +public fun Kim.readMetadata(byteReadChannel: ByteReadChannel, contentLength: Long): MediaMetadata? = KimKtor.readMetadata(byteReadChannel, contentLength) diff --git a/src/ktorMain/kotlin/com/ashampoo/kim/output/KotlinIoSinkByteWriter.kt b/src/ktorMain/kotlin/de/stefan_oltmann/kim/output/KotlinIoSinkByteWriter.kt similarity index 97% rename from src/ktorMain/kotlin/com/ashampoo/kim/output/KotlinIoSinkByteWriter.kt rename to src/ktorMain/kotlin/de/stefan_oltmann/kim/output/KotlinIoSinkByteWriter.kt index 07d9aac6..ba358b6c 100644 --- a/src/ktorMain/kotlin/com/ashampoo/kim/output/KotlinIoSinkByteWriter.kt +++ b/src/ktorMain/kotlin/de/stefan_oltmann/kim/output/KotlinIoSinkByteWriter.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.output +package de.stefan_oltmann.kim.output import kotlinx.io.Sink import kotlinx.io.buffered diff --git a/src/linuxArm64Test/kotlin/com/ashampoo/kim/ResourcePath.linux.kt b/src/linuxArm64Test/kotlin/com/ashampoo/kim/ResourcePath.linux.kt deleted file mode 100644 index 067606ef..00000000 --- a/src/linuxArm64Test/kotlin/com/ashampoo/kim/ResourcePath.linux.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -actual fun getPathForResource(path: String): String = path diff --git a/src/linuxX64Test/kotlin/com/ashampoo/kim/ResourcePath.linux.kt b/src/linuxX64Test/kotlin/com/ashampoo/kim/ResourcePath.linux.kt deleted file mode 100644 index 067606ef..00000000 --- a/src/linuxX64Test/kotlin/com/ashampoo/kim/ResourcePath.linux.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -actual fun getPathForResource(path: String): String = path diff --git a/src/posixMain/kotlin/com/ashampoo/kim/Main.kt b/src/posixMain/kotlin/de/stefan_oltmann/kim/Main.kt similarity index 86% rename from src/posixMain/kotlin/com/ashampoo/kim/Main.kt rename to src/posixMain/kotlin/de/stefan_oltmann/kim/Main.kt index dee4c037..a2a71076 100644 --- a/src/posixMain/kotlin/com/ashampoo/kim/Main.kt +++ b/src/posixMain/kotlin/de/stefan_oltmann/kim/Main.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim +package de.stefan_oltmann.kim -import com.ashampoo.kim.common.convertToPhotoMetadata -import com.ashampoo.kim.common.readFileAsByteArray +import de.stefan_oltmann.kim.common.convertToSummary +import de.stefan_oltmann.kim.common.readFileAsByteArray import platform.posix.perror public fun main(args: Array) { @@ -56,7 +56,7 @@ public fun main(args: Array) { println("--- Ashampoo Photo Organizer Metadata ---") - val photoMetadata = metadata.convertToPhotoMetadata() + val summary = metadata.convertToSummary() - println(photoMetadata) + println(summary) } diff --git a/src/posixMain/kotlin/com/ashampoo/kim/common/PosixByteArrayReader.kt b/src/posixMain/kotlin/de/stefan_oltmann/kim/common/PosixByteArrayReader.kt similarity index 98% rename from src/posixMain/kotlin/com/ashampoo/kim/common/PosixByteArrayReader.kt rename to src/posixMain/kotlin/de/stefan_oltmann/kim/common/PosixByteArrayReader.kt index 49dc9ee6..c1e2fb24 100644 --- a/src/posixMain/kotlin/com/ashampoo/kim/common/PosixByteArrayReader.kt +++ b/src/posixMain/kotlin/de/stefan_oltmann/kim/common/PosixByteArrayReader.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlinx.cinterop.CPointer import kotlinx.cinterop.ExperimentalForeignApi diff --git a/src/posixMain/kotlin/com/ashampoo/kim/common/ZLib.posix.kt b/src/posixMain/kotlin/de/stefan_oltmann/kim/common/ZLib.posix.kt similarity index 99% rename from src/posixMain/kotlin/com/ashampoo/kim/common/ZLib.posix.kt rename to src/posixMain/kotlin/de/stefan_oltmann/kim/common/ZLib.posix.kt index 9b847006..6260e0de 100644 --- a/src/posixMain/kotlin/com/ashampoo/kim/common/ZLib.posix.kt +++ b/src/posixMain/kotlin/de/stefan_oltmann/kim/common/ZLib.posix.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import kotlinx.cinterop.CPointer import kotlinx.cinterop.ExperimentalForeignApi diff --git a/src/wasmJsTest/kotlin/com/ashampoo/kim/ResourcePath.wasmJs.kt b/src/wasmJsTest/kotlin/com/ashampoo/kim/ResourcePath.wasmJs.kt deleted file mode 100644 index 067606ef..00000000 --- a/src/wasmJsTest/kotlin/com/ashampoo/kim/ResourcePath.wasmJs.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -actual fun getPathForResource(path: String): String = path diff --git a/src/wasmMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.wasm.kt b/src/wasmMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.wasm.kt similarity index 98% rename from src/wasmMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.wasm.kt rename to src/wasmMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.wasm.kt index 64218166..becea118 100644 --- a/src/wasmMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.wasm.kt +++ b/src/wasmMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.wasm.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common private val latin1CharArray = charArrayOf( '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005', '\u0006', '\u0007', '\u0008', diff --git a/src/wasmMain/kotlin/com/ashampoo/kim/common/ZLib.wasm.kt b/src/wasmMain/kotlin/de/stefan_oltmann/kim/common/ZLib.wasm.kt similarity index 97% rename from src/wasmMain/kotlin/com/ashampoo/kim/common/ZLib.wasm.kt rename to src/wasmMain/kotlin/de/stefan_oltmann/kim/common/ZLib.wasm.kt index b31049f3..ebbd185b 100644 --- a/src/wasmMain/kotlin/com/ashampoo/kim/common/ZLib.wasm.kt +++ b/src/wasmMain/kotlin/de/stefan_oltmann/kim/common/ZLib.wasm.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.ashampoo.kim.common +package de.stefan_oltmann.kim.common import org.khronos.webgl.Uint8Array import org.khronos.webgl.get diff --git a/src/wasmWasiTest/kotlin/com/ashampoo/kim/ResourcePath.wasmWasi.kt b/src/wasmWasiTest/kotlin/com/ashampoo/kim/ResourcePath.wasmWasi.kt deleted file mode 100644 index 067606ef..00000000 --- a/src/wasmWasiTest/kotlin/com/ashampoo/kim/ResourcePath.wasmWasi.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -actual fun getPathForResource(path: String): String = path diff --git a/src/winTest/kotlin/com/ashampoo/kim/ResourcePath.win.kt b/src/winTest/kotlin/com/ashampoo/kim/ResourcePath.win.kt deleted file mode 100644 index 067606ef..00000000 --- a/src/winTest/kotlin/com/ashampoo/kim/ResourcePath.win.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2025 Ashampoo GmbH & Co. KG - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.ashampoo.kim - -actual fun getPathForResource(path: String): String = path