Android Image Cropper

Android Image Cropper

Android Arsenal Build Status Download
Powerful (Zoom, Rotation, Multi-Source), customizable (Shape, Limits, Style), optimized (Async, Sampling, Matrix) and simpleimage cropping library for Android.
Crop

Usage

For a working implementation, please have a look at the Sample Project
  1. 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

  1. Add CropImageActivity into your AndroidManifest.xml
  2. <activity android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
      android:theme="@style/Base.Theme.AppCompat"/> <!-- optional (needed if default theme has no action bar) -->
  1. 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);
  1. 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

  1. 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"/>
  1. Set image to crop
cropImageView.setImageUriAsync(uri);
// or (prefer using uri for performance and better user experience)
cropImageView.setImageBitmap(bitmap);
  1. 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

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 with setCropMenuCropButtonIcon 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

Pages