一般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(); } } } } |