How to reduce the size of image before uploading it to firebase storage?

后端 未结 3 1655
说谎
说谎 2020-12-13 16:30

I have made an social app for image and video sharing.However,its taking too much time for loading the image.I am using the glide library.Please, tell me how can I reduce th

相关标签:
3条回答
  • 2020-12-13 17:02

    I have done the same for uploading image to firebase using bitmap.compress

    private void postDataToFirebase() {
            mProgressDialog.setMessage("Posting the Blog to Firebase");
            mProgressDialog.setCancelable(false);
    
            final String titleValue = mPostTitle.getText().toString();
            final String description = mPostDescription.getText().toString();
            if((!TextUtils.isEmpty(titleValue))&& (!TextUtils.isEmpty(description)) && bitmap != null)
            {
                mProgressDialog.show();
                StorageReference filePath = mStorage.child("Blog_Images").child(imagePathName);
                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 20, bytes);
                String path = MediaStore.Images.Media.insertImage(PostActivity.this.getContentResolver(), bitmap, imagePathName, null);
                Uri uri = Uri.parse(path);
                filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
    
                        Uri downloadUrl = taskSnapshot.getDownloadUrl();
    
                        DatabaseReference newPost = mDatabaseReference.push();
                        newPost.child("Title").setValue(titleValue);
                        newPost.child("Desc").setValue(description);
                        newPost.child("imageUrl").setValue(downloadUrl.toString());
                        Toast.makeText(PostActivity.this, "Data Posted Successfully to Firebase server", Toast.LENGTH_LONG).show();
                        mProgressDialog.dismiss();
                        Intent intent = new Intent(PostActivity.this, MainActivity.class);
                        startActivity(intent);
                    }
                });
    
            }
    
        }
    

    bitmap.compress(Bitmap.CompressFormat format, int quality, OutputStream stream)

    you can change the quality of the bitmap and compress it.

    0 讨论(0)
  • 2020-12-13 17:12
    StorageReference childRef2 = [your firebase storage path]
    storageRef.child(UserDetails.username+"profilepic.jpg");
                        Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
                        byte[] data = baos.toByteArray();
                        //uploading the image
                        UploadTask uploadTask2 = childRef2.putBytes(data);
                        uploadTask2.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                Toast.makeText(Profilepic.this, "Upload successful", Toast.LENGTH_LONG).show();
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(Profilepic.this, "Upload Failed -> " + e, Toast.LENGTH_LONG).show();
                            }
                        });`
    

    just go ahead and do above steps it will reduce your image size and upload it on firebase it reduce the image size upto 1 to 2 mb like on my experience 4mb file became 304kb .

    filepath is and File object of your selected image. :)

    0 讨论(0)
  • 2020-12-13 17:19

    Here i am using this code to upload compressed image on firebase storeage

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode==RC_PHOTO_PICKER && resultCode==RESULT_OK)
            {
                mProgressBar.setVisibility(ProgressBar.VISIBLE);
                Uri selectedImageUri = data.getData();
    
                Bitmap bmp = null;
                try {
                    bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
                //here you can choose quality factor in third parameter(ex. i choosen 25) 
                bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
                byte[] fileInBytes = baos.toByteArray();
    
               StorageReference photoref = chatPhotosStorageReference.child(selectedImageUri.getLastPathSegment());
    
               //here i am uploading
               photoref.putBytes(fileInBytes).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
                           public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                              // When the image has successfully uploaded, we get its download URL
                               mProgressBar.setVisibility(ProgressBar.INVISIBLE);
    
                               Uri downloadUrl = taskSnapshot.getDownloadUrl();
                               String id = chatRoomDataBaseReference.push().getKey();
                               String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
    
                               // Set the download URL to the message box, so that the user can send it to the database
                               FriendlyMessageModel friendlyMessage = new FriendlyMessageModel(id,null, userId, downloadUrl.toString(),time);
                       chatRoomDataBaseReference.child(id).setValue(friendlyMessage);
                                           }
                       });
            }
        }
    
    0 讨论(0)
提交回复
热议问题