From a1c8b49607bfff77c58425692e6b33fd0bec234a Mon Sep 17 00:00:00 2001 From: Erik Everardo Date: Sat, 25 Nov 2023 11:24:36 -0600 Subject: [PATCH] compresion de imagen con WEBP --- .../data/repository/ImagesRepositoryImpl.kt | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt b/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt index 0ed66cd..ed78519 100644 --- a/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt @@ -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) {