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

来源:互联网 发布:网络流行歌曲在线试听 编辑:程序博客网 时间:2024/05/18 01:49

很多同学进行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指向相应的fileintent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//是否将数据保留在Bitmap中返回intent.putExtra("return-data", true);intent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());intent.putExtra("noFaceDetection", true); // no face detectionactivity.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的数,得到质量较高的图片。

原创粉丝点击