使用RESTAPI将Android裁剪图像存储在数据库中

使用RESTAPI将Android裁剪图像存储在数据库中,android,rest,cropimage.net,Android,Rest,Cropimage.net,我有一堆代码,当我不应用作物活动时,它们可以正常工作 但我想对所选图像应用裁剪,并使用RESTAPI将其发送到服务器 TypedFile typedFile = new TypedFile("multipart/form-data",savedFileDestination); initiateProgressDialog(); 如何设置裁剪的URI而不是savedFileDestination,以便它将裁剪的图像路径作为文件?使用以下方法进行裁剪: public static Bitmap

我有一堆代码,当我不应用作物活动时,它们可以正常工作 但我想对所选图像应用裁剪,并使用RESTAPI将其发送到服务器

TypedFile typedFile = new TypedFile("multipart/form-data",savedFileDestination);
initiateProgressDialog();

如何设置裁剪的URI而不是
savedFileDestination
,以便它将裁剪的图像路径作为文件?

使用以下方法进行裁剪:

public static Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) {
    Bitmap bm = null;

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    bm = BitmapFactory.decodeFile(path, options);

    return bm;
}



public static int calculateInSampleSize(

        BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
        if (width > height) {
            inSampleSize = Math.round((float) height / (float) reqHeight);
        } else {
            inSampleSize = Math.round((float) width / (float) reqWidth);
        }
    }

    return inSampleSize;
}

感谢您的回答和评论,我找到了我的解决方案,我必须首先将我的croped映像存储到文件目录中,因为croped映像存储在高速缓存中,我们需要文件路径并将文件路径发送到服务器以存储它。。。。。再次感谢您点击相机

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                File outPutFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "Path of your custom directory);
                if (!outPutFile.exists()) {
                    outPutFile.mkdirs();
                }
                Uri capturedImageUri = Uri.fromFile(File.createTempFile("Your app directory name" + System.currentTimeMillis(), ".jpg", outPutFile));
                Logg.e(getClass().getSimpleName(), "Captured_Pic ===== " + Uri.fromFile(outPutFile));
                intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
                startActivityForResult(intent, Util.REQUEST_CAMERA);
点击画廊

CropImage.startPickImageActivity(HomeActivity.this);
OnActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_CANCELED) {
        switch (requestCode) {
            case Util.REQUEST_CAMERA: // Camera request
                startCropImageActivity(capturedImageUri);
                break;

            case CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE: // Crop
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
                try {
                    if (resultCode == RESULT_OK) {
                        resultUri = result.getUri();
                        mProfileView.setImageURI(Uri.parse(resultUri.toString())); // this is my imageview, where I'll set that cropped image Uri.
                    } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                        Exception error = result.getError();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;

            case CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE: // Gallery request
                try {
                    Uri selectedImageUri = CropImage.getPickImageResultUri(this, data);
                    startCropImageActivity(selectedImageUri);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
        }
    }
}
private void startCropImageActivity(Uri imageUri) {
    CropImage.activity(imageUri)
            .setGuidelines(CropImageView.Guidelines.ON)
            .setCropShape(CropImageView.CropShape.RECTANGLE)
            .setActivityMenuIconColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .setGuidelinesColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .setScaleType(CropImageView.ScaleType.FIT_CENTER)
            .setFixAspectRatio(true)
            .setBorderCornerColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .setBorderLineColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .start(this);
}
此方法将根据您的要求将属性设置为裁剪图像工具

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_CANCELED) {
        switch (requestCode) {
            case Util.REQUEST_CAMERA: // Camera request
                startCropImageActivity(capturedImageUri);
                break;

            case CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE: // Crop
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
                try {
                    if (resultCode == RESULT_OK) {
                        resultUri = result.getUri();
                        mProfileView.setImageURI(Uri.parse(resultUri.toString())); // this is my imageview, where I'll set that cropped image Uri.
                    } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                        Exception error = result.getError();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;

            case CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE: // Gallery request
                try {
                    Uri selectedImageUri = CropImage.getPickImageResultUri(this, data);
                    startCropImageActivity(selectedImageUri);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
        }
    }
}
private void startCropImageActivity(Uri imageUri) {
    CropImage.activity(imageUri)
            .setGuidelines(CropImageView.Guidelines.ON)
            .setCropShape(CropImageView.CropShape.RECTANGLE)
            .setActivityMenuIconColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .setGuidelinesColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .setScaleType(CropImageView.ScaleType.FIT_CENTER)
            .setFixAspectRatio(true)
            .setBorderCornerColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .setBorderLineColor(ContextCompat.getColor(HomeActivity.this, R.color.app_blue))
            .start(this);
}

请参阅此链接@Snehal Gongle:-,你会在Util.REQUEST\u CROP\u IMAGEI中找到cropedimageri,我实际上使用这个库,它提供了裁剪图像的功能,并设置图像的高度和宽度编译'com.theartofdev.edmodo:android image croper:2.4.+',所以我不必为画廊和相机提供单独的代码,这个库对我有用…所以我的大问题是我无法设置交叉图像路径,即file:/data/user/0/com.snake.againimage/cache/crapped560934775.jpg类似的内容,这会导致错误,例如E/Upload:file:/data/user/0/com.snake.againimage/cache/crapped560934775.jpg:open失败:enoint(没有这样的文件或目录)如果您使用的是marshmallow版本,您是否已在清单中添加了有关写入和读取外部存储的权限以及运行时权限?是的,我已在mainfest中添加了这两个权限以及运行时权限