Android大图片、缩略图剪裁解决方案

很多同学进行Android开发的时候,不可避免的会遇到图片的剪裁,比如剪裁头像。
怎么打开照相机或者打开图库本文暂时不讲,本文主要介绍,剪裁时遇到的问题。

剪裁界面的参数设置

我们知道,此类图片的来源有拍照和图库,而可以采取的方式有

  1. 使用Bitmap并返回数据
  2. 使用Uri不返回数据

我们可以用以下代码打开系统提供的剪裁界面

Intent intent = null;

intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");

intent.putExtra("crop", "true");
//剪裁框比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//输出的宽和高(对应输出图的质量)
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
//是否保存比例
intent.putExtra("scale", true);
//将URI指向相应的file
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
//是否将数据保留在Bitmap中返回
intent.putExtra("return-data", true);
intent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
activity.startActivityForResult(intent, 3);

其中的outputX与outputY为输出的图大小,数值越大,图片的质量越高。
而根据经验,return-data设为true时,如果output大于400,很可能造成程序的闪退。

缩略图

对于缩略图,我们对画质的要求不高,我们可以将return-data设为true。这时,你将会获得一个与内部数据关联的Action,并且Bitmap以此方式返回。

可以通过以下代码,在onActivityResult中获取到Bitmap

Bundle extras = data.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");

大图

如果我们想截取的图为大图,此时对像素的要求比较高,需要将output设得比较大(超过400),这时,我们就要将return-data设为false。这时,我们就只能通过uri来得到图片了。
我们可以用MediaStore.EXTRA_OUTPUT关联到一个Uri,在onActivityResult中,可以通过以下代码得到Bitmap

Bitmap bitmap = null;
       try {
       //通过uri直接获取bitmap
       bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imgUri);
       } catch (IOException e) {
           e.printStackTrace();
       }

而outputX和outputY我们都可以设为大于400的数,得到质量较高的图片。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值