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 package com.isolaatti.images.common.data.repository
import android.content.ContentResolver import android.content.ContentResolver
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Picture
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.MemoryFile
import android.os.SharedMemory
import android.util.Log import android.util.Log
import com.isolaatti.images.common.data.remote.ImagesApi import com.isolaatti.images.common.data.remote.ImagesApi
import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.images.common.domain.entity.Image
@ -13,7 +19,11 @@ import okhttp3.MultipartBody
import okhttp3.RequestBody import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
import retrofit2.awaitResponse import retrofit2.awaitResponse
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.InputStream import java.io.InputStream
import java.io.OutputStream
import java.io.OutputStreamWriter
import javax.inject.Inject import javax.inject.Inject
class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi, private val contentResolver: ContentResolver) : 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 var imageInputStream: InputStream? = null
try { try {
imageInputStream = contentResolver.openInputStream(imageUri) 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)) emit(Resource.Error(Resource.Error.ErrorType.InputError))
return@flow 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) { if(response.isSuccessful) {
val imageDto = response.body() val imageDto = response.body()
if(imageDto == null) { if(imageDto == null) {