我正在使用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);
}
默认情况下,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:使用centerCrop
或fitCenter
缩放图像
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);
试试这个
Glide
.with(ctx)
.load(url)
.apply(new RequestOptions().override(600, 200))
.into(imageView);