From 2226fb08b385266acfc7e104381f7053b7bd7579 Mon Sep 17 00:00:00 2001 From: Akexorcist Date: Fri, 15 Oct 2021 00:34:44 +0700 Subject: [PATCH 1/2] More precise image resolution resizing --- compressor/src/main/java/id/zelory/compressor/Util.kt | 8 ++++++-- .../zelory/compressor/constraint/ResolutionConstraint.kt | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/compressor/src/main/java/id/zelory/compressor/Util.kt b/compressor/src/main/java/id/zelory/compressor/Util.kt index bcb1cb3..72ab3d1 100644 --- a/compressor/src/main/java/id/zelory/compressor/Util.kt +++ b/compressor/src/main/java/id/zelory/compressor/Util.kt @@ -38,10 +38,14 @@ fun decodeSampledBitmapFromFile(imageFile: File, reqWidth: Int, reqHeight: Int): return BitmapFactory.Options().run { inJustDecodeBounds = true BitmapFactory.decodeFile(imageFile.absolutePath, this) - inSampleSize = calculateInSampleSize(this, reqWidth, reqHeight) - inJustDecodeBounds = false + val expectSize = outWidth.coerceAtMost(outHeight) + val minReqSize = reqWidth.coerceAtMost(reqHeight) + if (expectSize > minReqSize) { + inDensity = expectSize + inTargetDensity = minReqSize * inSampleSize + } BitmapFactory.decodeFile(imageFile.absolutePath, this) } } diff --git a/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt b/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt index 9b1b75f..026dc4d 100644 --- a/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt +++ b/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt @@ -19,7 +19,7 @@ class ResolutionConstraint(private val width: Int, private val height: Int) : Co return BitmapFactory.Options().run { inJustDecodeBounds = true BitmapFactory.decodeFile(imageFile.absolutePath, this) - calculateInSampleSize(this, width, height) <= 1 + outWidth.coerceAtMost(outHeight) <= width.coerceAtMost(height) } } From f37f2a00674f393e469322a011a02cd81fc6525c Mon Sep 17 00:00:00 2001 From: Akexorcist Date: Fri, 15 Oct 2021 02:57:29 +0700 Subject: [PATCH 2/2] Add different image orientation support --- .../src/main/java/id/zelory/compressor/Util.kt | 13 ++++++++----- .../compressor/constraint/ResolutionConstraint.kt | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/compressor/src/main/java/id/zelory/compressor/Util.kt b/compressor/src/main/java/id/zelory/compressor/Util.kt index 72ab3d1..97bdb57 100644 --- a/compressor/src/main/java/id/zelory/compressor/Util.kt +++ b/compressor/src/main/java/id/zelory/compressor/Util.kt @@ -40,11 +40,14 @@ fun decodeSampledBitmapFromFile(imageFile: File, reqWidth: Int, reqHeight: Int): BitmapFactory.decodeFile(imageFile.absolutePath, this) inSampleSize = calculateInSampleSize(this, reqWidth, reqHeight) inJustDecodeBounds = false - val expectSize = outWidth.coerceAtMost(outHeight) - val minReqSize = reqWidth.coerceAtMost(reqHeight) - if (expectSize > minReqSize) { - inDensity = expectSize - inTargetDensity = minReqSize * inSampleSize + val outRatio = outWidth.toFloat() / outHeight.toFloat() + val reqRatio = reqWidth.toFloat() / reqHeight.toFloat() + if (outRatio > reqRatio) { + inDensity = outHeight + inTargetDensity = reqHeight * inSampleSize + } else if (outRatio <= reqRatio) { + inDensity = outWidth + inTargetDensity = reqWidth * inSampleSize } BitmapFactory.decodeFile(imageFile.absolutePath, this) } diff --git a/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt b/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt index 026dc4d..d8db87c 100644 --- a/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt +++ b/compressor/src/main/java/id/zelory/compressor/constraint/ResolutionConstraint.kt @@ -19,7 +19,7 @@ class ResolutionConstraint(private val width: Int, private val height: Int) : Co return BitmapFactory.Options().run { inJustDecodeBounds = true BitmapFactory.decodeFile(imageFile.absolutePath, this) - outWidth.coerceAtMost(outHeight) <= width.coerceAtMost(height) + outWidth - width <= 0 || outHeight - height <= 0 } }