一般Android的默认图片编辑器是支持对图片进行剪裁操作的,所以如果我们的应用需要对图片进行剪裁操作,调用系统的图片编辑器即可,代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |     public void onBtnCropClick(View v){         //如果输出到文件,设定输出文件地址         File outimgfile = new File(getImagePath(this)  + "bcoder.com.jpg");         Intent intent = new Intent();         intent.setAction("com.android.camera.action.CROP");         File file = new File(getImagePath(this)  + "test.jpg"); //先在sd卡根目录放一个test.jpg或者把路径改为你的图片的地址         Uri mUri = Uri.fromFile(file);         intent.setDataAndType(mUri, "image/*");// mUri是已经选择的图片Uri         intent.putExtra("crop", "true"); //        intent.putExtra("aspectX", 1);// 裁剪框纵横比例,横向值,只能是整数值 //        intent.putExtra("aspectY", 1); // 裁剪框纵横比例,纵向值,只能是整数值 //        intent.putExtra("outputX", 150);// 输出图片宽度 //        intent.putExtra("outputY", 150); // 输出图片高度         intent.putExtra("scale", false);         intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outimgfile));//输出到文件         intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); //输出图片格式         intent.putExtra("noFaceDetection", true); // 是否有人脸识别         intent.putExtra("return-data", false); //是否在OnActivityResult中返回剪裁后的图片数据(建议不要)         startActivityForResult(intent, 200);     }     public static String getImagePath(Context context){         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {             return Environment.getExternalStorageDirectory() + "/";         }else {             return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" ;         }     } | 
如果输出到文件(设置MediaStore.EXTRA_OUTPUT的值):
| 1 2 3 4 5 6 7 8 9 |     @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         super.onActivityResult(requestCode, resultCode, data);         if(resultCode == RESULT_OK){             if(200 == requestCode){                 imgview.setImageURI(Uri.parse(getImagePath(this)  + "bcoder.com.jpg"));             }         }     } | 
如果在Activity中处理返回的图片流(return-data的值为true):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |     @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         super.onActivityResult(requestCode, resultCode, data);         // 拿到剪切数据         Bitmap bmap = data.getParcelableExtra("data");         imgview.setImageBitmap(bmap);         // 图像保存到文件中         FileOutputStream foutput = null;         try {             foutput = new FileOutputStream(getImagePath(this)  + "bcoder.com.jpg");             bmap.compress(Bitmap.CompressFormat.PNG, 100, foutput);         } catch (FileNotFoundException e) {             e.printStackTrace();         } finally {             if (null != foutput) {                 try {                     foutput.close();                 } catch (IOException e) {                     e.printStackTrace();                 }             }         }     } | 
