Android裁剪图片

使用Intent:

注意点:

  1. 非官方提供的代码,该方法并不通用,不是所有机器都支持这个intent,不推荐
  2. 裁剪时putExtra设置crop为true即可。
  3. Uri必须以file://开头,不然会导致“无法保存剪裁的图片”的错误。

可以封装这样一段代码:

private void cropImageUri(Uri uri, int outputX, int outputY, int requestCode,Uri outputUri){
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 2);
    intent.putExtra("aspectY", 1);
    intent.putExtra("outputX", outputX);
    intent.putExtra("outputY", outputY);
    intent.putExtra("scale", true);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
    intent.putExtra("return-data", false);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", true); // no face detection
    startActivityForResult(intent, requestCode);
}

另外关于putExtra的信号:

附加选项 数据类型 描述
crop String 发送裁剪信号
aspectX int X方向上的比例
aspectY int Y方向上的比例
outputX int 裁剪区的宽
outputY int 裁剪区的高
scale boolean 是否保留比例
return-data boolean 是否将数据保留在Bitmap中返回
data Parcelable 相应的Bitmap数据
circleCrop String 圆形裁剪区域?
MediaStore.EXTRA_OUTPUT (“output”) URI 将URI指向相应的file:///…

使用Github lib,
以下是一些star比较高的lib: