【问题标题】:Android - image crop not loading imageAndroid - 图像裁剪不加载图像
【发布时间】:2019-10-27 11:50:41
【问题描述】:

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

相机和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);
}

【问题讨论】:

    标签: java android android-studio ucrop


    【解决方案1】:

    解决方案:

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

    放在项目中的类下面。

    遵守准则:

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

    openCropActivity:

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

    onActivityResult:

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

    结果:

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

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

    【讨论】:

      【解决方案2】:

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

      对我有用的是我使用了toUri(),就像这样

      val sourceUri = myFile.toUri()
      

      【讨论】:

        猜你喜欢
        • 2015-02-02
        • 2016-05-04
        • 1970-01-01
        • 2018-09-20
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        相关资源
        最近更新 更多