1

我想剪下我从画廊或相机拍的照片。但我在裁剪活动中看不到照片。它只是没有来。我从相机拍照并开始切割活动。屏幕看起来像这样:

在此处输入图像描述

相机和 onActivityResult

    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );

        // Save a file: path for use with ACTION_VIEW intents
        currentPhotoPath = image.getAbsolutePath();
        return image;
    }

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            // Create the File where the photo should go
            File photoFile = null;
            try {
                photoFile = createImageFile();
            } catch (IOException ex) {
                // Error occurred while creating the File
                Log.d("FotografHata",""+ex);
            }
            // Continue only if the File was successfully created
            if (photoFile != null) {
                Uri photoURI = FileProvider.getUriForFile(this,
                        "com.maksu.aquarium.fileprovider",
                        photoFile);
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    }

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
        Uri uri = Uri.parse(currentPhotoPath);
        openCropActivity(uri, uri);
    } else if (requestCode == UCrop.REQUEST_CROP && resultCode == RESULT_OK) {
        Uri uri = UCrop.getOutput(data);
    }
}

openCropActivity

private void openCropActivity(Uri girenUri, Uri cikanUri) {
    UCrop.of(girenUri, cikanUri)
            .withAspectRatio(16, 9)
            .start(this);
}
4

2 回答 2

2

解决方案:

我正在使用Multi-Picker Library来使用图库照片和挑选照片。选择照片后,我打开照片是ucrop 库

放在项目中的类下面。

遵循代码:

private String filePath;
private ImagePicker imagePicker;
private CameraImagePicker cameraImagePicker;

private void pickImage() {
        //showProgressBarWithoutHide();

        if (AppUtils.isValidContext(activity)) {
            imagePicker = new ImagePicker(activity);
            imagePicker.setImagePickerCallback(pickerCallback);
            //imagePicker.allowMultiple(); // Default is false
            imagePicker.shouldGenerateMetadata(false); // Default is true
            imagePicker.shouldGenerateThumbnails(false); // Default is true
            imagePicker.pickImage();
        }
    }

    private void cameraImg() {

        if (AppUtils.isValidContext(activity)) {
            if (!SystemUtils.checkForCamera(activity)) {
                Snackbar.make(btnAddToGallery, "Your device doesn't support camera", Snackbar.LENGTH_LONG).show();
                return;
            }
            cameraImagePicker = new CameraImagePicker(activity);
            cameraImagePicker.setImagePickerCallback(pickerCallback);
            cameraImagePicker.shouldGenerateMetadata(false); // Default is true
            cameraImagePicker.shouldGenerateThumbnails(false); // Default is true
            filePath = cameraImagePicker.pickImage();

            Log.i(TAG, "filepath: " + filePath);
        }
    }

 ImagePickerCallback pickerCallback = new ImagePickerCallback() {
    @Override
    public void onImagesChosen(List<ChosenImage> list) {
        try {
            Log.i(TAG, "onImagesChosen() " + list.size());

            if (list.size() == 0) {
                Snackbar.make(btnAddToGallery, R.string.err_failed_to_pick_img, Snackbar.LENGTH_LONG).show();
                return;
            }
            final ChosenImage chosenImage = list.get(0);


            if (AppUtils.isValidContext(activity) && isAdded()) {
                activity.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        if (chosenImage != null) {
                            Log.i(TAG, "getOriginalPath Path:" + chosenImage.getOriginalPath());

                            validateImagePath(chosenImage.getOriginalPath());

                        } else {
                            //hideProgressBar();
                            Snackbar.make(btnAddToGallery, "Failed to choose image", Snackbar.LENGTH_LONG).show();
                            Log.e(TAG, "Failed to choose image");
                        }
                    }
                });
            }
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    @Override
    public void onError(String s) {

        //hideProgressBar();
    }


};

private void validateImagePath(String imagePath) {
    String ext = FileUtils.getFileExtension(imagePath);

    Log.i(TAG, "EXT: " + ext);
    if (ext.equals("jpg") || ext.equals("png") || ext.equals("jpeg")) {

        if (imagePath != null) {

            File file = new File(imagePath);
            long length = file.length();

            Log.i(TAG, "File size is: " + length);
            if (length > Constants.MAX_IMAGE_FILE_SIZE) {
                //hideProgressBar();
                Snackbar.make(btnAddToGallery, getString(R.string.err_img_too_large), Snackbar.LENGTH_LONG).show();
                FileUtils.deleteFileFromPath(filePath);
                return;
            }

            filePath = imagePath;
            PerformCrop();

        } else {
            //hideProgressBar();
            Toast.makeText(activity, R.string.err_failed_to_pick_img, Toast.LENGTH_SHORT).show();
        }
    } else {
        //hideProgressBar();
        Snackbar.make(btnAddToGallery, "Please select valid file.", Snackbar.LENGTH_LONG).show();
        Log.e(TAG, "Please select valid file");
    }
}

开放作物活动:

private void PerformCrop() {            
        try {
            Uri sourceUri = Uri.parse("file://" + filePath);
            Uri destUri = Uri.fromFile(new File(activity.getFilesDir(), "U_Crop_Image_" + System.currentTimeMillis() + ".png")); 

            UCrop uCrop = UCrop.of(sourceUri, destUri); //Uri.fromFile(new File(getCacheDir(), destinationFileName))

            uCrop = basisConfig(uCrop);
            uCrop = advancedConfig(uCrop);

            uCrop.start(activity);

        } catch (Throwable e) {
            e.printStackTrace();
        }

    }

活动结果:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case Picker.PICK_IMAGE_DEVICE:

                if (resultCode == Activity.RESULT_OK && data != null) {

                    if (imagePicker == null && AppUtils.isValidContext(activity)) {
                        imagePicker = new ImagePicker(activity);
                        imagePicker.setImagePickerCallback(pickerCallback);
                    }
                    if (imagePicker != null) {
                        imagePicker.submit(data);
                    }
                } else {
                    Log.e(TAG, "PICK_IMAGE_DEVICE intent is null or result code is " + resultCode);
                }

                break;
            case Picker.PICK_IMAGE_CAMERA:

                if (resultCode == Activity.RESULT_OK && data != null) {

                    if (cameraImagePicker == null && AppUtils.isValidContext(activity)) {
                        cameraImagePicker = new CameraImagePicker(activity);
                        cameraImagePicker.reinitialize(filePath);
                        // OR in one statement
                        // imagePicker = new CameraImagePicker(Activity.getActivity(), outputPath);
                        cameraImagePicker.setImagePickerCallback(pickerCallback);
                    }
                    if (cameraImagePicker != null) {
                        cameraImagePicker.submit(data);
                    }
                } else {
                    Log.e(TAG, "PICK_IMAGE_CAMERA intent is null or result code is " + resultCode);
                    if (filePath != null && filePath.length() > 0) {
                        PerformCrop();
                    } else {
                        Snackbar.make(btnAddToGallery, R.string.err_failed_to_pick_img, Snackbar.LENGTH_LONG).show();
                    }

                }

                break;
            case UCrop.REQUEST_CROP:
                if (resultCode == Activity.RESULT_OK) {
                    final Uri resultUri = UCrop.getOutput(data);
                    Log.e(TAG, "Cropped image: " + resultUri);

                    try {
                        if (resultUri != null && resultUri.toString().length() > 0) {
                            /* Remove dummy image */
//                            set crop Image... 
                        }
                    } catch (Throwable e) {
                        e.printStackTrace();
                    }

                    //showCropAd();

                } else if (resultCode == UCrop.RESULT_ERROR) {

                    try {
                        final Throwable cropError = UCrop.getError(data);
                        if (cropError != null && cropError.getMessage() != null) {
                            Log.e(TAG, "cropError: " + cropError.getMessage());
                        }
                    } catch (Throwable e) {
                        e.printStackTrace();
                    }
                }

                break;
          }
    }

结果:

我的应用程序演示跟随图像:

在此处输入图像描述

在此处输入图像描述在此处输入图像描述

此代码仅供您参考。如果您仍然遇到任何问题,请告诉我。很高兴能帮助你。

于 2019-11-02T06:32:49.393 回答
0

Uri我通过使用传递源和目标,Uri.parse(myFile)所以它一直在加载

对我有用的是我用过toUri(),像这样

val sourceUri = myFile.toUri()
于 2021-03-02T13:05:51.570 回答