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

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

在这里输入图像说明

Solutions Collecting From Web of "在Android中裁剪固定大小的图片"

我会使用这些解决scheme之一:

  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

您可以克隆构build,然后将其添加到您的项目。

希望它会帮助你。

有一种方法可以使用Æ

 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); 

你应该像这样调用裁剪方法:

  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 } }