当前位置: 首页 > 知识库问答 >
问题:

如何在将图像上载到firebase存储之前减小图像大小?

空浩淼
2023-03-14

我制作了一个用于图像和视频共享的社交应用程序。但是,加载图像需要花费太多时间。我正在使用glide图书馆。请告诉我如何在图像质量没有明显变化的情况下(如Instagram)缩小从gallery中拾取的图像的大小,然后将其上载到firebase存储。请帮忙!

共有3个答案

秋光熙
2023-03-14

我也使用位图将图像上传到firebase。压紧

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);
                }
            });

        }

    }

位图。压缩(位图.CompressFormat格式、整数质量、输出流)

您可以更改位图的质量并对其进行压缩。

吕亮
2023-03-14

在这里,我使用此代码将压缩图像上传到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);
                                       }
                   });
        }
    }
龚招
2023-03-14
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();
                        }
                    });`

只需继续执行上述步骤,它将减少您的图像大小,并将其上载到firebase。它将图像大小减少到1到2MB,就像我的经验一样,4mb文件变成了304kb。

filepath是和File对象的选定图像。:)

 类似资料:
  • 我想在上传到Firebase存储之前减小图像文件大小,因为上传需要很长时间。 这是conatins编辑文本图像视图的表单 单击“保存”按钮时,我同时保存数据(在实时数据库中)和图像(存储)。 那么如何减少图像大小或压缩它呢??

  • 我想在上传到Firebase存储之前调整图像的大小。 我的问题是:FireBase在其Uri上上传图像。我从图库意图中获取图像,并将其放在上,然后像这样调整其大小: firebase根据Uri像这样上传它(如果有其他上传文件的方法,它将非常有用!): 有没有办法获取

  • 我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储,以便在需要时使用它。 现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:或,每个选项分别需要或。 我怎么能把我的,并从它获得一个或用于上传? -- 或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的? 无论

  • 我试图在Firebase存储中使用Firebase上传图像,但文件不能完全上传。它只显示图像的大小9字节,下载时无法预览。 这是我使用的代码:- 我使用的反应本地图像作物选择器。我使用Firebase,但不是反应本机Firebase。请帮助!

  • 我想减少一个480 X 480位图图像大小到30 X 30像素大小,但保持整个高度和宽度完整。(我不想缩放或使用高度/宽度属性!) 让我用更简单的方式--我试图将位图图像中的像素从480 X 480减少到30 X 30,高度和宽度保持不变,并且在将图像转换为30 X 30后,我预计会有一些失真。 我做了缩放,但它减少了宽度和高度,如果我再次增加宽度和高度,它只是恢复正常的像素。谢谢!

  • 我有一个尺寸为800x800的图像,其大小为170 kb。我想将此图像调整为600x600。调整大小后,我希望缩小图像大小。我该怎么做?