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

Android firebase调整图像大小并上载到firebase存储

池麒
2023-03-14

我想在上传到Firebase存储之前调整图像的大小。

我的问题是:FireBase在其Uri上上传图像。我从图库意图中获取图像,并将其放在ImageView上,然后像这样调整其大小:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent returnIntentData) {
    super.onActivityResult(requestCode, resultCode, returnIntentData);

    switch(requestCode) {
        case RC_SELECT_PHOTO:
            if (resultCode == RESULT_OK) {

                mImageUri = returnIntentData.getData();
                mSelectedImage.setImageURI(mImageUri);

                //get a Image obj from ImageView

                Bitmap bit = ((BitmapDrawable) mSelectedImage.getDrawable()).getBitmap();

                int width = bit.getWidth();
                int height = bit.getHeight();
                float rate = 0.0f;

                int maxResolution = 1920;

                int newWidth = width;
                int newHeight = height;

                if(width > height) {
                    if(maxResolution < width) {
                        rate = maxResolution/ (float) width;
                        newHeight = (int) (height * rate);
                        newWidth = maxResolution;
                    }

                } else {
                    if(maxResolution < height) {
                        rate = maxResolution/(float)height;
                        newWidth = (int) (width * rate);
                        newHeight = maxResolution;
                    }
                }

                Bitmap resizedImage = Bitmap.createScaledBitmap(bit, newWidth, newHeight, true);

                mSelectedImage.setImageBitmap(resizedImage);

            }

firebase根据Uri像这样上传它(如果有其他上传文件的方法,它将非常有用!):

public void uploadPhotoToStorage() {
    //present image's Ref
    StorageReference presentGymPhotoRef =
            mGymStorageReferences.child(mImageUri.getLastPathSegment());
    //Upload file to Firebase Storage
    presentGymPhotoRef.putFile(mImageUri)
            .addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Uri downloadUri = taskSnapshot.getDownloadUrl();
                    //save gymPhoto Uri to instance

                    gymPhotoUri = downloadUri.toString();
                    gymName = mEditGymName.getText().toString();

.......

有没有办法获取位图的Uri或图像视图的Uri?或者只是调整大小并成功上传?


共有1个答案

钱毅
2023-03-14

如果你只需要上传一个特定大小的文件,这样你就可以用毕加索来检索同样大小的文件http://square.github.io/picasso/.它允许您提供url,并使用您可能需要的高度和宽度尺寸调整图像大小,而无需在上载之前调整图像大小(您可能出于其他原因需要调整图像大小)。下面是我实现的一个示例,用于从URL获取图像并调整图像大小以适合我的ImageView。

/**
 * Binds the data from the json file to the ImageView and the Textviews
 * are part of the movie_layout resource file.
 * @param recyclerViewHolder
 * @param position
 */
@Override
public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int position) {
    MovieData movieData = list.get(position);
    Picasso.with(context).load(movieData.getMovie_img_url()).resize(75,100).into(recyclerViewHolder.imageView);
    recyclerViewHolder.textViewTitle.setText(movieData.getMovie_title());
    recyclerViewHolder.textViewAuthor.setText(movieData.getMovie_author());

}

它的实现很简单,请查看下面的代码,了解如何将其添加到您的项目中:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.squareup.picasso:picasso:2.5.2' <!--Added Here-->
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'

}

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

  • 问题内容: 我在这里使用Go调整大小包:https://github.com/nfnt/resize 我正在从S3中提取图像,如下所示: // this gives me data []byte 之后,我需要调整图像大小: // problem is that the original_image has to be of type image.Image 将图像上传到我的S3存储桶 // pro

  • 问题内容: 在Django中上传图片后,如何轻松调整其大小?我正在使用Django 1.0.2,并且已经安装了PIL。 我当时正在考虑重写Model的save()方法以调整其大小,但是我真的不知道如何开始并覆盖它。 有人可以指出我正确的方向吗?谢谢 :-) @GuðmundurH:这将不起作用,因为django-stdimage软件包在Windows上不起作用 问题答案: 在这种方法中,你可以将块

  • 问题内容: 我要在pdf文件中添加一个水印。水印是.bmp图像,并且是2290 x3026。尝试调整此图片的大小以适合页面时,我遇到很多麻烦,有人有什么建议吗? 这是方法的输出。 我会与你们共享pdf图片,但不幸的是我不能。 我应该尝试改用.jpg吗?我真的不知道iText如何处理不同的图像扩展名。 问题答案: 您可以使用另一种方法:“手动”调整图像大小(即通过图像处理软件),而不是通过iText

  • 我有一个水印,我想放在我的pdf中。水印是一个。bmp图像,为2290 x 3026。我在调整图片大小以适应页面时遇到了很多问题,有人有什么建议吗? 下面是方法的输出。 我想和你们分享pdf的图片,但不幸的是我不能。 我是否应该尝试使用。改为jpg?我真的不知道iText处理不同图像扩展的效果如何。

  • 问题内容: 我正在尝试将调整大小的图像上传到S3: 但我得到一个错误: 问题答案: 您需要先将输出图像转换为一组字节,然后才能上载到s3。您可以将图像写入文件然后上传文件,也可以使用cStringIO对象来避免写入磁盘,就像我在这里所做的那样: