Android Image Cropper
Powerful (Zoom, Rotation, Multi-Source), customizable (Shape, Limits, Style), optimized (Async, Sampling, Matrix) and simpleimage cropping library for Android.
Usage
For a working implementation, please have a look at the Sample Project
- Include the library
compile 'com.theartofdev.edmodo:android-image-cropper:2.6.+'
Add permissions to manifest
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Using Activity
- Add
CropImageActivity
into your AndroidManifest.xml <activity android:name="com.theartofdev.edmodo.cropper.CropImageActivity" android:theme="@style/Base.Theme.AppCompat"/> <!-- optional (needed if default theme has no action bar) -->
- Start
CropImageActivity
using builder pattern from your activity
// start picker to get image for cropping and then use the image in cropping activity
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(this);
// start cropping activity for pre-acquired image saved on the device
CropImage.activity(imageUri)
.start(this);
// for fragment (DO NOT use `getActivity()`)
CropImage.activity()
.start(getContext(), this);
- Override
onActivityResult
method in your activity to get crop result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri resultUri = result.getUri();
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
Using View
- Add
CropImageView
into your activity
<!-- Image Cropper fill the remaining available height -->
<com.theartofdev.edmodo.cropper.CropImageView
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:id="@+id/cropImageView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
- Set image to crop
cropImageView.setImageUriAsync(uri);
// or (prefer using uri for performance and better user experience)
cropImageView.setImageBitmap(bitmap);
- Get cropped image
// subscribe to async event using cropImageView.setOnCropImageCompleteListener(listener)
cropImageView.getCroppedImageAsync();
// or
Bitmap cropped = cropImageView.getCroppedImage();
Features
- Built-in
CropImageActivity
. - Set cropping image as Bitmap, Resource or Android URI (Gallery, Camera, Dropbox, etc.).
- Image rotation/flipping during cropping.
- Auto zoom-in/out to relevant cropping area.
- Auto rotate bitmap by image Exif data.
- Set result image min/max limits in pixels.
- Set initial crop window size/location.
- Request cropped image resize to specific size.
- Bitmap memory optimization, OOM handling (should never occur)!
- API Level 14.
- More..
Customizations
- Cropping window shape: Rectangular or Oval (cube/circle by fixing aspect ratio).
- Cropping window aspect ratio: Free, 1:1, 4:3, 16:9 or Custom.
- Guidelines appearance: Off / Always On / Show on Toch.
- Cropping window Border line, border corner and guidelines thickness and color.
- Cropping background color.
For more information, see the GitHub Wiki.
Posts
- Android cropping image from camera or gallery
- Android Image Cropper async support and custom progress UI
- Adding auto-zoom feature to Android-Image-Cropper
Change log
2.6.0
- Update to sdk v27
- Update to gradle v3
2.5.1
- Try solve manifest merger issue by adding
transitive
flag #405 (thx @j-garin) - Use thread pool executors for async image loading and cropping operations to prevent app hang if default executor is busy (thx @ruifcardoso)
- Fix image rotation breaking min/max crop result restrictions #401
- Propagate all extra data set on start crop activity intent back in crop result intent #352
2.5.0
- Update to sdk v26
- Update gradle plugin to 2.0
- Update min sdk version to 14
- Fix NPE in
getWholeImageRect
- Remove
crop_image_menu_crop
drawable support, replace withsetCropMenuCropButtonIcon
builder api. - Support setting crop button title via builder api.
- Add string resource for "no permissions" toast.
2.4.7
- Fix toolbar menu crop icon sometimes appears with random icon (#305)
- Use CharSequence instead of string for activity title (thx @KentHawkings) (#297)
- Fix class not found exception on some Samsung devices (Huge thanks to @Vantablack) (#332)
- Add original image dimensions to CropResult (Thanks @gazialankus) (#327)
- Making the library JitPack-friendly (Thanks @gazialankus) (#325)
- Allow a Fragment to call the startPickImageActivity help method in CropImage (Thanks @cdavietei) (#31
No comments:
Post a Comment