在Android中裁剪固定大小的图像

我正在尝试裁剪图像,但我希望能够将裁剪区域设置为640px x 640px。 我想阻止用户裁剪到一个非常小的区域。 所以基本上我宁愿为裁剪区域设置固定的高度和宽度。 我已经查看了几个第三方库,但没有看到解决这个问题。 我怎样才能做到这一点?

在此处输入图像描述

我会使用以下解决方案之一:

  1. https://github.com/jdamcd/android-crop
  2. https://github.com/edmodo/cropper

两者似乎都适合解决您的问题,并确保涵盖更多边缘案例,设备和其他Android内容,以便更稳定和可靠。

编辑:
我已经对android-crop了一些更改,现在你可以使用withFixedSize(int width, int height)来设置固定的裁剪区域(以像素为单位)。

看起来像这样:

  private void beginCrop(Uri source) { Uri outputUri = Uri.fromFile(new File(getCacheDir(), "cropped")); new Crop(source).output(outputUri).withFixedSize(640, 640).start(this); } 

这是拉取请求。

检查我的github上的完整代码https://github.com/mklimek/android-crop/tree/newfeature_fied_size_crop 。

您可以克隆构建并在之后将其添加到项目中。

希望它会对你有所帮助。

你可以使用一种方法

 private void performCrop(){ try { //call the standard crop action intent (the user device may not support it) Intent cropIntent = new Intent("com.android.camera.action.CROP"); //indicate image type and Uri cropIntent.setDataAndType(selectedImage, "image/*"); //set crop properties cropIntent.putExtra("crop", "true"); //indicate aspect of desired crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); //indicate output X and Y cropIntent.putExtra("outputX", 640); cropIntent.putExtra("outputY", 640); //retrieve data on return cropIntent.putExtra("return-data", true); //start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, PIC_CROP); } catch(ActivityNotFoundException anfe){ //display an error message String errorMessage = "Whoops - your device doesn't support the crop action!"; Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } 

这部分代码是您感兴趣的:

  cropIntent.putExtra("outputX", 640); cropIntent.putExtra("outputY", 640); 

你应该像这样调用crop方法:

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA && resultCode == RESULT_OK) { selectedImage = data.getData(); performCrop(); } if (requestCode == UPLOAD && resultCode == RESULT_OK) { selectedImage = data.getData(); performCrop(); } if (requestCode == PIC_CROP && resultCode == RESULT_OK){ Bundle extras = data.getExtras(); //get the cropped bitmap Bitmap thePic = extras.getParcelable("data"); // Do what you want to do with the pic here } }