[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes

Überblick

$ identify -verbose IMG_1046.png | grep Orient
  Orientation: TopLeft

--EXIF muss bei der Größenänderung des Bildes berücksichtigt werden.

Bibliothek zu verwenden

Implementierung

build.gradle


dependencies {
    ...
    implementation "com.sksamuel.scrimage:scrimage-core:4.0.4"
    ...
}

ImageResizer.kt


object ImageResizer {
    enum class ImageFormat {
        JPEG,
        PNG;

        companion object {
            fun fromName(formatName: String): ImageFormat? {
                return when (formatName) {
                    "jpg", "jpeg" -> JPEG
                    "png" -> PNG
                    else -> null
                }
            }
        }
    }

    /**
     *Lange Seite[size]Und die Größe ändern
     *
     *Die lange Seite ist[size]Wenn es kleiner als ist, ändern Sie die Größe nicht
     */
    fun resize(inputStream: InputStream, size: Int, formatName: String): File {
        //Lesen Sie die Originaldatei
        val original = ImmutableImage.loader().fromStream(inputStream)
        val originalWidth = original.width.toDouble()
        val originalHeight = original.height.toDouble()

        if (originalWidth <= size && originalHeight <= size) {
            //Wenn die lange Seite kleiner als die Größe ist, ändern Sie die Größe nicht
            return createImageTempFile(original, formatName)
        }

        val resizedWidth: Double
        val resizedHeight: Double
        if (originalWidth > originalHeight) {
            resizedWidth = size.toDouble()
            resizedHeight = size * originalHeight / originalWidth
        } else {
            resizedHeight = size.toDouble()
            resizedWidth = size * originalWidth / originalHeight
        }

        val resized = original.fit(resizedWidth.roundToInt(), resizedHeight.roundToInt())
        return createImageTempFile(resized, formatName)
    }

    private fun createImageTempFile(image: ImmutableImage, formatName: String): File {
        val format = ImageFormat.fromName(formatName)
            ?: throw BadRequestException("The image format $formatName is not supported ")
        val outFile = createTempFile(suffix = ".$formatName")
        when (format) {
            ImageFormat.JPEG -> image.output(JpegWriter(), outFile)
            ImageFormat.PNG -> image.output(PngWriter(), outFile)
        }
        return outFile
    }
}

Dadurch wird ein Bild mit geänderter Größe mit der richtigen Ausrichtung erstellt (die EXIF-Ausrichtung geht durch das verkleinerte Bild verloren).

Bemerkungen

Referenz

Recommended Posts

[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes
Bitte beachten Sie die Aufteilung (Aufteilung) von Java Kotlin Int und Int
Die Illusion der Objektorientierung
[Java] Löschen Sie die Elemente von List
[Java Edition] Geschichte der Serialisierung
Kotlin-Generika für Java-Entwickler
Der Ursprung von Java-Lambda-Ausdrücken
Zeigen Sie Text über dem Bild an
Holen Sie sich das Ergebnis von POST in Java
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Untersuchen Sie die Speichernutzung von Java-Elementen
[Java] Ermittelt den Tag eines bestimmten Tages
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Über die Klassifizierung und das Konzept von Immutable / Mutable / Const / Variable von Java und Kotlin.
Vergleichen Sie Elemente eines Arrays (Java)
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Was sind die aktualisierten Funktionen von Java 13
Messen Sie einfach die Größe von Java-Objekten
Rückblick auf die Grundlagen von Java
Ausgabe des Buches "Einführung in Java"
Die Geschichte des Schreibens von Java in Emacs
[Java] Überprüfen Sie die Anzahl der Zeichen
[Java] [Spring] Testen Sie das Verhalten des Loggers
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
JAVA: jar, aar, zeige den Inhalt der Datei an
Die Geschichte eines gewöhnlichen Othello in Java
[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Java] Der verwirrende Teil von String und StringBuilder
[Hinweis] Java: Messen Sie die Geschwindigkeit der Zeichenfolgenverkettung
Ich habe die Eigenschaften von Java und .NET verglichen
[Java] Achten Sie auf den Schlüsseltyp der Karte
Spüren Sie den Lauf der Zeit auch in Java
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Versuchen Sie eine ähnliche Suche in der Bildsuche mit dem Java SDK [Suche]
Probieren Sie Progate Free Edition [Java II]
Das Datum und die Uhrzeit von java8 wurden aktualisiert
Ändern Sie den Docker-Image- und Container-Platzierungsordner
Importieren Sie Dateien derselben Hierarchie in Java
Erster Touch der Files-Klasse (oder Java 8)
Java Willkommen im Sumpf der zweidimensionalen Arrays
Probieren Sie Progate Free Edition [Java I]
[Java] Übersicht über Java
[Java] So erhalten Sie die URL der Übergangsquelle
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
[Read Effective Java] Kapitel 3 Punkt 12 "Berücksichtigung der Implementierung von Comparable"
Wie schreibe ich Scala aus der Perspektive von Java
Der Vergleich von enum ist == und gleich ist gut [Java]
[Java] Überprüfen Sie die JDK-Version der erstellten Kriegsdatei
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda