有时候我会们遇到需要裁剪图片的时候,比如处理头像的时候,Android提供了方便的办法来处理。
核心方法如下:
/**
* 裁剪图片
* @param uri
* @param outPutX 裁剪后的宽
* @param outputY 裁剪后的高
* @param requestCode 返回的标识值
*/
public void cropImage(Uri uri,int outPutX, int outputY,int requestCode){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");
intent.putExtra("aspectX",12);
intent.putExtra("aspectY",5);
intent.putExtra("outputX",outPutX);
intent.putExtra("outputY",outputY);
intent.putExtra("outputFormat","JPEG");
intent.putExtra("noFaceDatection",true);
intent.putExtra("return-data",true);
startActivityForResult(intent,requestCode);
}
需要注意的是: aspectX aspectY 这两个值是宽和高的比值,如果你的目标图片是 100 * 100 那两个值都是1 ,你在裁剪时看到的框框是正方形的。
如果你比例像本例中的是12:5 的那么就是长方形的。
如何调用:
Uri uri = null;
if(data != null){
uri = data.getData();
}else {
String fileName = getSharedPreferences("temp",ShopEdit.MODE_MULTI_PROCESS).getString("tempName","");
uri = Uri.fromFile(new File(DuParm.XxipPATH,fileName));
}
cropImage(uri,720,300,CROP_PICTURE);
本例中必须要用到的就是:
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
MyLog.i(TAG,"requestCode=" + requestCode + "; resultCode=" + resultCode);
调用方法是的uri = data.getData() 的data的来源就是重写这个方法中的。
本人的具体顺序是:
1. 点击事件事
2. 弹出对框(选择相册或相机)
3. 取得图片后带参数返回调用他的Activity ,Activity中即使用onActivityResult接收返回参数
4. 根据返回的data取得图片,打开新的Activity 调用裁剪图片的功能对图片进行裁剪
5. 再一次执行到了 onActivityResult 这次返回了裁剪后的图片,
6.至于图片怎么处理,就是你自己的事了。
(完)