Optimize media: Compress Png to Png.
This commit is contained in:
parent
ea73ee0481
commit
9f0461166e
2 changed files with 13 additions and 2 deletions
|
|
@ -125,6 +125,7 @@ class AndroidMediaPreProcessor @Inject constructor(
|
||||||
val compressionResult = imageCompressor.compressToTmpFile(
|
val compressionResult = imageCompressor.compressToTmpFile(
|
||||||
inputStreamProvider = { contentResolver.openInputStream(uri)!! },
|
inputStreamProvider = { contentResolver.openInputStream(uri)!! },
|
||||||
resizeMode = ResizeMode.Approximate(IMAGE_SCALE_REF_SIZE, IMAGE_SCALE_REF_SIZE),
|
resizeMode = ResizeMode.Approximate(IMAGE_SCALE_REF_SIZE, IMAGE_SCALE_REF_SIZE),
|
||||||
|
mimeType = mimeType,
|
||||||
orientation = orientation,
|
orientation = orientation,
|
||||||
).getOrThrow()
|
).getOrThrow()
|
||||||
val thumbnailResult = thumbnailFactory.createImageThumbnail(compressionResult.file)
|
val thumbnailResult = thumbnailFactory.createImageThumbnail(compressionResult.file)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import io.element.android.libraries.androidutils.bitmap.resizeToMax
|
||||||
import io.element.android.libraries.androidutils.bitmap.rotateToMetadataOrientation
|
import io.element.android.libraries.androidutils.bitmap.rotateToMetadataOrientation
|
||||||
import io.element.android.libraries.androidutils.file.createTmpFile
|
import io.element.android.libraries.androidutils.file.createTmpFile
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
|
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||||
import io.element.android.libraries.di.ApplicationContext
|
import io.element.android.libraries.di.ApplicationContext
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
@ -34,14 +35,23 @@ class ImageCompressor @Inject constructor(
|
||||||
suspend fun compressToTmpFile(
|
suspend fun compressToTmpFile(
|
||||||
inputStreamProvider: () -> InputStream,
|
inputStreamProvider: () -> InputStream,
|
||||||
resizeMode: ResizeMode,
|
resizeMode: ResizeMode,
|
||||||
format: Bitmap.CompressFormat = Bitmap.CompressFormat.JPEG,
|
mimeType: String,
|
||||||
orientation: Int = ExifInterface.ORIENTATION_UNDEFINED,
|
orientation: Int = ExifInterface.ORIENTATION_UNDEFINED,
|
||||||
desiredQuality: Int = 78,
|
desiredQuality: Int = 78,
|
||||||
): Result<ImageCompressionResult> = withContext(dispatchers.io) {
|
): Result<ImageCompressionResult> = withContext(dispatchers.io) {
|
||||||
runCatching {
|
runCatching {
|
||||||
|
val format = when (mimeType) {
|
||||||
|
MimeTypes.Png -> Bitmap.CompressFormat.PNG
|
||||||
|
else -> Bitmap.CompressFormat.JPEG
|
||||||
|
}
|
||||||
|
val extension = when (mimeType) {
|
||||||
|
MimeTypes.Png -> "png"
|
||||||
|
else -> "jpeg"
|
||||||
|
}
|
||||||
|
|
||||||
val compressedBitmap = compressToBitmap(inputStreamProvider, resizeMode, orientation).getOrThrow()
|
val compressedBitmap = compressToBitmap(inputStreamProvider, resizeMode, orientation).getOrThrow()
|
||||||
// Encode bitmap to the destination temporary file
|
// Encode bitmap to the destination temporary file
|
||||||
val tmpFile = context.createTmpFile(extension = "jpeg")
|
val tmpFile = context.createTmpFile(extension = extension)
|
||||||
tmpFile.outputStream().use {
|
tmpFile.outputStream().use {
|
||||||
compressedBitmap.compress(format, desiredQuality, it)
|
compressedBitmap.compress(format, desiredQuality, it)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue