Crop image by passing the path to the image file in Android

I tried the code below. However, this always results in an image size of 160 * 160.

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(Uri.fromFile(pictureFile), "image/*"); //set crop properties cropIntent.putExtra("crop", "true"); //indicate aspect of desired crop cropIntent.putExtra("aspectX", 100); cropIntent.putExtra("aspectY", 100); cropIntent.putExtra("scale", true); //indicate output X and Y cropIntent.putExtra("outputX", 500); cropIntent.putExtra("outputY", 500); //retrieve data on return cropIntent.putExtra("return-data", true); //start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, CROP_IMAGE); } 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(); } 

I would like to crop the image by passing its path. I do not want to capture / select from the application or gallery by default. Please help me with this.

+6
source share
3 answers

I solved this by creating a new file before calling Intent and passing the file path to store the cropped image with the intent. Here is the solution for this.

 private Uri mCropImagedUri; private final int CROP_IMAGE = 100;//unique request code number. Which is used to identify the request result in onActivityResult() /**Crop the image * @return returns <tt>true</tt> if crop supports by the device,otherwise false*/ private boolean performCropImage(){ try { if(mFinalImageUri!=null){ //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(mFinalImageUri, "image/*"); //set crop properties cropIntent.putExtra("crop", "true"); //indicate aspect of desired crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); cropIntent.putExtra("scale", true); //indicate output X and Y cropIntent.putExtra("outputX", 500); cropIntent.putExtra("outputY", 500); //retrieve data on return cropIntent.putExtra("return-data", false); File f = createNewFile("CROP_"); try { f.createNewFile(); } catch (IOException ex) { VLLog.e("io", ex.getMessage()); } mCropImagedUri = Uri.fromFile(f); cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCropImagedUri); //start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, CROP_IMAGE); return true; } } 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(); return false; } return false; } private File createNewFile(String prefix){ if(prefix==null || "".equalsIgnoreCase(prefix)){ prefix="IMG_"; } File newDirectory = new File(Environment.getExternalStorageDirectory()+"/mypics/"); if(!newDirectory.exists()){ if(newDirectory.mkdir()){ VLLog.d(mContext.getClass().getName(), newDirectory.getAbsolutePath()+" directory created"); } } File file = new File(newDirectory,(prefix+System.currentTimeMillis()+".jpg")); if(file.exists()){ //this wont be executed file.delete(); try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return file; } 

So, here we should not worry about the data that is included in the onActivityResult() method.

Here is the complete cropping information. I used this to solve. http://www.androidworks.com/crop_large_photos_with_android

+11
source

Android does not support inline cropping intent. You should not assume it is affordable.

Instead, you should use your own solution or use a third-party library such as:

https://github.com/ArthurHub/Android-Image-Cropper

Read more about this here:

https://commonsware.com/blog/2013/01/23/no-android-does-not-have-crop-intent.html

0
source

This way you can scale the image:

 Bitmap.createScaledBitmap(bitmap,50,50,true); 
-5
source

Source: https://habr.com/ru/post/952577/


All Articles