This commit is contained in:
Benoit Marty 2020-09-02 18:51:09 +02:00 committed by Benoit Marty
parent 71aa315f2a
commit 6246fd98c3
1 changed files with 20 additions and 22 deletions

View File

@ -33,42 +33,40 @@ import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
import kotlin.coroutines.CoroutineContext
internal class ImageCompressor @Inject constructor( internal class ImageCompressor @Inject constructor(
@SessionDownloadsDirectory @SessionDownloadsDirectory
private val sessionCacheDirectory: File private val sessionCacheDirectory: File
) { ) {
private val cacheFolder = File(sessionCacheDirectory, "MF") private val cacheFolder = File(sessionCacheDirectory, "MF")
suspend fun compress( suspend fun compress(
context: Context, context: Context,
imageUri: Uri, imageUri: Uri,
desiredWidth: Int = 612, desiredWidth: Int,
desiredHeight: Int = 816, desiredHeight: Int,
desiredQuality: Int = 80, desiredQuality: Int = 80): Uri {
coroutineContext: CoroutineContext = Dispatchers.IO return withContext(Dispatchers.IO) {
): Uri = withContext(coroutineContext) { val compressedBitmap = BitmapFactory.Options().run {
val compressedBitmap = BitmapFactory.Options().run { inJustDecodeBounds = true
inJustDecodeBounds = true decodeBitmap(context, imageUri, this)
decodeBitmap(context, imageUri, this) inSampleSize = calculateInSampleSize(outWidth, outHeight, desiredWidth, desiredHeight)
inSampleSize = calculateInSampleSize(outWidth, outHeight, desiredWidth, desiredHeight) inJustDecodeBounds = false
inJustDecodeBounds = false decodeBitmap(context, imageUri, this)?.let {
decodeBitmap(context, imageUri, this)?.let { rotateBitmap(context, imageUri, it)
rotateBitmap(context, imageUri, it) }
} } ?: return@withContext imageUri
} ?: return@withContext imageUri
val destinationUri = createDestinationUri(context) val destinationUri = createDestinationUri(context)
runCatching { runCatching {
context.contentResolver.openOutputStream(destinationUri).use { context.contentResolver.openOutputStream(destinationUri).use {
compressedBitmap.compress(Bitmap.CompressFormat.JPEG, desiredQuality, it) compressedBitmap.compress(Bitmap.CompressFormat.JPEG, desiredQuality, it)
}
} }
return@withContext destinationUri
} }
return@withContext destinationUri
} }
private fun rotateBitmap(context: Context, uri: Uri, bitmap: Bitmap): Bitmap { private fun rotateBitmap(context: Context, uri: Uri, bitmap: Bitmap): Bitmap {