Как сжимать фотографию перед отправкой в Firebasestorage?

Нужно уменьшать размер фотографии перед отправкой в базу данных. Мой текущий метод отправки.


private Uri ImageUriTwo;
private String DownloadImageUrlTwo;
 private StorageReference magPhoto;
private static final int GALLERYPICK = 1;

private void OpenGallery() {
        Intent galleryintent = new Intent();
        galleryintent.setAction(Intent.ACTION_GET_CONTENT);
        galleryintent.setType("image/*");
        startActivityForResult(galleryintent, GALLERYPICK);

    }

  StorageReference filePath = magPhoto.child(ImageUriTwo.getLastPathSegment() + ".jpg");
        final UploadTask uploadTask = filePath.putFile(ImageUriTwo);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                String message = e.toString();
                Toast.makeText(ShopName.this, "error" + message, Toast.LENGTH_SHORT).show();
                progressDialog.dismiss();
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Toast.makeText(ShopName.this, "Изображение загружено", Toast.LENGTH_SHORT).show();
                Task<Uri> uriTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                    @Override
                    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                        if (!task.isSuccessful()) {
                            throw task.getException();
                        }
                        DownloadImageUrlTwo = filePath.getDownloadUrl().toString();

                        return filePath.getDownloadUrl();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        if (task.isSuccessful()) {
                            DownloadImageUrlTwo = task.getResult().toString();


                            REGMAG();
                        }


                    }
                });
            }
        });




Ответы (1 шт):

Автор решения: Andrew

Самый быстрый и простой вариант - использование библиотеки. У себя в проекте использую такую. Чтобы ею воспользоваться нужно в build.gradle добавить такие строки:

dependencies {
    ...
    implementation 'com.github.vinodbaste:ImageCompressor:1.0.1'
}

Вот пример (Kotlin):

val imagePath= "actualImagePath"

val imageFileBc = File(imagePath)
val imageSizeBc = imageFileBc.length() / 1024 // In BYTES
Log.d("image_before_compress", imageSizeBc.toString())
ImageCompressUtils.compressImage(
context = this,
imagePath = imagePath,
imageName = "imageName",
imageQuality = 50
)
val imageFileAc = File(imagePath)
val imageSizeAC = imageFileAc.length() / 1024 // In BYTES
Log.d("image_after_compress", imageSizeAC.toString())

//your function to play with compressed image
loadCompressedImage(imagePath) 
→ Ссылка