ident
von imagemagic bestätigt werden.$ identify -verbose IMG_1046.png | grep Orient
Orientation: TopLeft
--EXIF muss bei der Größenänderung des Bildes berücksichtigt werden.
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).
Recommended Posts