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

时间:2014-12-16 20:04:45

标签: android crop

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

enter image description here

2 个答案:

答案 0 :(得分:16)

我使用其中一种解决方案:

  1. https://github.com/jdamcd/android-crop
  2. https://github.com/edmodo/cropper
  3. 两者似乎都适合解决您的问题,并确保涵盖更多边缘案例,设备和其他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);
        }
    

    这是pull request.

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

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

    希望它会对你有所帮助。

答案 1 :(得分:4)

有一种方法可以使用Æ

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
    }



}