如何使用Glide for android压缩和降低图像质量

问题描述 投票:0回答:2

我正在使用Glide库上传图片。在我的另一个应用程序中,我使用此代码

void imageButtonclick() {
        iv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CropImage.activity(filePath).setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(1,1).setOutputCompressQuality(50).start(UploadBook.this);

                // Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    //intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
                    //startActivityForResult(intent, CAMERA_REQUEST_CODE);
            }
        });

通过声明.setOutputCompressQuality(50)来减小图像的大小但是我不知道如何对Glide图像库做同样的事情。

我的代码是

public static void loadLocalImage(Context ctx, RequestOptions glideRequests, Uri uri, ImageView imageView,
                                      RequestListener listener) {

        glideRequests.fitCenter()
                .skipMemoryCache(true)
                .diskCacheStrategy(DiskCacheStrategy.NONE);
        Glide.with(ctx)
                .applyDefaultRequestOptions(glideRequests.placeholder(R.drawable.ic_stub).error(R.drawable.ic_stub))
                .asBitmap()
                .load(uri)
                .listener(listener)
                .into(imageView);

    }
java android android-glide
2个回答
4
投票

来自Glide official site

默认情况下,Glide更喜欢RGB_565,因为它每个像素只需要两个字节(16位),因此具有更高质量和系统默认值ARGB_8888的一半内存占用。

因此,您不能再降低位图的质量,但您还有其他选择。

选项1:使用override(x, y)调整图像大小。

RequestOptions myOptions = new RequestOptions()
    .override(100, 100);

Glide.with(fragment)
    .asBitmap()
    .apply(myOptions)
    .load(url)
    .into(bitmapView);

选项2:使用centerCropfitCenter缩放图像

centerCrop()是一种裁剪技术,可以缩放图像,使其填充ImageView的请求边界,然后裁剪额外的图像。 ImageView将完全填充,但可能不会显示整个图像。

RequestOptions myOptions = new RequestOptions()
    .centerCrop();

Glide.with(ctx)
    .asBitmap()
    .apply(myOptions)
    .load(url)
    .into(bitmapView);

fitCenter()是一种裁剪技术,可以缩放图像,使两个维度都等于或小于ImageView的请求边界。图像将完全显示,但可能无法填满整个ImageView。

RequestOptions myOptions = new RequestOptions()
        .fitCenter();

    Glide.with(ctx)
        .asBitmap()
        .apply(myOptions)
        .load(url)
        .into(bitmapView);

选项3:混合使用这两种解决方案

RequestOptions myOptions = new RequestOptions()
    .fitCenter() // or centerCrop
    .override(100, 100);

 Glide.with(ctx)
     .asBitmap()
     .apply(myOptions)
     .load(url)
     .into(bitmapView);

1
投票

试试这个

Glide
    .with(ctx)
    .load(url)
    .apply(new RequestOptions().override(600, 200))
    .into(imageView);
© www.soinside.com 2019 - 2024. All rights reserved.