compresion de imagen con WEBP

This commit is contained in:
Erik Everardo 2023-11-25 11:24:36 -06:00
parent 5992f2a07a
commit a1c8b49607

View File

@ -1,7 +1,13 @@
package com.isolaatti.images.common.data.repository
import android.content.ContentResolver
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Picture
import android.net.Uri
import android.os.Build
import android.os.MemoryFile
import android.os.SharedMemory
import android.util.Log
import com.isolaatti.images.common.data.remote.ImagesApi
import com.isolaatti.images.common.domain.entity.Image
@ -13,7 +19,11 @@ import okhttp3.MultipartBody
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import retrofit2.awaitResponse
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.InputStream
import java.io.OutputStream
import java.io.OutputStreamWriter
import javax.inject.Inject
class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi, private val contentResolver: ContentResolver) :
@ -44,16 +54,23 @@ class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi,
var imageInputStream: InputStream? = null
try {
imageInputStream = contentResolver.openInputStream(imageUri)
val imageBytes = imageInputStream?.readBytes()
val bitmap = BitmapFactory.decodeStream(imageInputStream)
if(imageBytes == null) {
if(bitmap == null) {
emit(Resource.Error(Resource.Error.ErrorType.InputError))
return@flow
}
Log.d("ImagesRepository", "${imageBytes.size} bytes")
val outputStream = ByteArrayOutputStream()
val response = imagesApi.postImage(MultipartBody.Part.createFormData("file", name,imageBytes.toRequestBody()), name).awaitResponse()
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
bitmap.compress(Bitmap.CompressFormat.WEBP, 50, outputStream)
} else {
bitmap.compress(Bitmap.CompressFormat.WEBP_LOSSY, 50, outputStream)
}
val response = imagesApi.postImage(MultipartBody.Part.createFormData("file", name,outputStream.toByteArray().toRequestBody()), name).awaitResponse()
if(response.isSuccessful) {
val imageDto = response.body()
if(imageDto == null) {