上传图片大小

时间:2018-06-26 08:46:06

标签: android

我正在ProfileFargment.java中创建用户的个人资料。现在,它具有个人资料图片(来自用户的Google个人资料图片)和横幅图片。我制作了一个按钮,该按钮基本上允许用户更改其横幅图片,但只能加载某些图像。我不知道这是否与图像大小有关...这是我使用的代码:

按钮

 btnEditarFotoCapa.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            openGallery(); // Chama a função para abrir a galeria
        }
    });

意图

private void openGallery(){
    Intent gallery = new Intent(Intent.ACTION_PICK, 
    MediaStore.Images.Media.INTERNAL_CONTENT_URI);
    startActivityForResult(gallery, PICK_IMAGES);
}

检索图库图片

// Caso a galeria tenha sido aberta, aplica a imagem na foto de capa
//
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == getActivity().RESULT_OK && requestCode == PICK_IMAGES){
        imageUri = data.getData();
        ImageView imgFotoCapa = getActivity().findViewById(R.id.imgFotoCapa);
        Picasso.with(getContext()).load(imageUri).resize(446, 203).into(imgFotoCapa);

        /* SharedPreferences myPrefs = getContext().getSharedPreferences("FotoCapa", Context.MODE_PRIVATE);
        SharedPreferences.Editor myPrefsEdit = myPrefs.edit();
        myPrefsEdit.putString("fotoCapa", imageUri.toString());
        myPrefsEdit.commit(); */
    }
}

4 个答案:

答案 0 :(得分:1)

尝试使用此代码..

使用Glide加载图像既简单又最新。

将滑行依赖添加到应用程序级别的gradle文件中。.

    implementation 'com.github.bumptech.glide:glide:4.7.1'

下面的代码打开画廊后

            Intent intent = new Intent(
                Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/*");
        startActivityForResult(
                Intent.createChooser(intent, "Select File"),
                REQUEST_GALLERY);

获取选择图像的路径。

    /**
 * this method used to get camera image path.
 *
 * @param
 * @return
 */

public String getPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, null, null, null);
    if (cursor.moveToFirst()) {
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        res = cursor.getString(column_index);
    }
    cursor.close();
    return res;
}

该onActivity Result方法之后。

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) {
        Uri uri = data.getData();
        String path = getPathFromURI(uri);
            Glide.with(this)
                    .load(path)
                    .apply(RequestOptions.circleCropTransform())
                    .into(epfIvUserImage);
        } 
}

答案 1 :(得分:0)

我最近像您一样使用了 Picasso 库,我遇到了类似的问题。之所以没有加载某些图像,是因为它们的尺寸较大。由于某些缓存问题,毕加索在下载大图像时会遇到一些问题。

此问题的一个例子 GitHub Picasso Large Image Issue

ImageRequest示例

RequestQueue rq = Volley.newRequestQueue(context);
    ImageRequest request = new ImageRequest(link, new 
    Response.Listener<Bitmap>() {
                @Override
                public void onResponse(Bitmap bitmap) {
                    setBackground(context,bitmap);
                }
            }, 0, 0, null, new Response.ErrorListener() {
                public void onErrorResponse(VolleyError error) {
                    Log.e("VolleyImage",error.toString());
                }
            });
    rq.add(request);

答案 2 :(得分:0)

使用毕加索变换

Picasso.with(context).load(url).transform(new ImageTransformation()).placeholder(placeHolder).error(placeHolder).into(imageView);


public class ImageTransformation implements Transformation {
    @Override public Bitmap transform(Bitmap source) {
        int targetWidth = 256;
        double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
        int targetHeight = (int) (targetWidth * aspectRatio);
        Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, true);
        if (result != source) {
            // Same bitmap is returned if sizes are the same
            source.recycle();
        }
        return result;
    }

    @Override public String key() {
        return "cropPosterTransformation" + 256;
    }
}

答案 3 :(得分:-1)

在活动的onActivityResult中,致电super.onActivityResult()。通常,只有当您使活动覆盖onActivityResult并调用其super时,该片段才能捕获结果。