--Lorsque vous créez une image avec l'appareil photo de l'iPhone, l'orientation de l'image est enregistrée dans l'orientation EXIF. --EXIF peut être confirmé avec la commande ʻidentify` d'imagemagic.
$ identify -verbose IMG_1046.png | grep Orient
Orientation: TopLeft
--EXIF doit être pris en compte lors du redimensionnement de l'image.
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
}
}
}
}
/**
*Long côté[size]Et redimensionner
*
*Le côté long est[size]S'il est plus petit que, ne redimensionnez pas
*/
fun resize(inputStream: InputStream, size: Int, formatName: String): File {
//Lire le fichier original
val original = ImmutableImage.loader().fromStream(inputStream)
val originalWidth = original.width.toDouble()
val originalHeight = original.height.toDouble()
if (originalWidth <= size && originalHeight <= size) {
//Si le côté long est plus petit que la taille, ne redimensionnez pas
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
}
}
Cela créera une image redimensionnée avec l'orientation correcte (l'orientation EXIF sera perdue de l'image redimensionnée)
Recommended Posts