Image Cropping Library for Android, optimised for Camera / Gallery.

Overview

CanHub

๐Ÿšจ How to migrate from ArthurHub/Android-Image-Cropper ๐Ÿšจ

Wanna help the project? Amazing!

Android Image Cropper

Powerful (Zoom, Rotation, Multi-Source); Customizable (Shape, Limits, Style); Optimized (Async, Sampling, Matrix); Simple image cropping library for Android.

Crop

Add to your project

See GitHub Wiki for more info.

Step 1. Add the JitPack repository to your root build.gradle

  allprojects {
     repositories {
       ....
       maven { url 'https://jitpack.io' }
     }
  }

Step 2. Add the dependency

  dependencies {
       implementation 'com.github.CanHub:Android-Image-Cropper:${version}'
  }

Latest Release Version

Step 3. Add permissions to manifest

Only need if you run on devices under OS10 (SDK 29)

">
<manifest>
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
       android:maxSdkVersion="28" />
manifest>

Step 4. Add this line to your Proguard config file

-keep class androidx.appcompat.widget.** { *; }

Step 5. Set source compatibility version to Java 8

  • Go to app level build.gradle file

  • Add this line inside android in build.gradle

     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
     }
  • This will set the java version to 8

Using the Library

There is 3 ways of using the library:

  • Calling crop directly (Sample code: sample/crop_image)
  • Using the CropView (Sample code: sample/crop_image_view)
  • Extending the activity (Sample code: sample/extend_activity) Your choice depends on how you want your layout to look.

Obs: The library has a public pick image contract, more on wiki.

Calling crop directly

  • Register for activity result with CropImageContract
class MainActivity {
   private val cropImage = registerForActivityResult(CropImageContract()) { result ->
           if (result.isSuccessful) {
               // use the returned uri
               val uriContent = result.uriContent 
               val uriFilePath = result.getUriFilePath(context) // optional usage
           } else {
               // an error occurred
               val exception = result.error
           }
       }

   private fun startCrop() {
       // start picker to get image for cropping and then use the image in cropping activity
       cropImage.launch(
           options {
               setGuidelines(Guidelines.ON)
           }
       )

       // start cropping activity for pre-acquired image saved on the device and customize settings
       cropImage.launch(
           options(uri = imageUri) {
               setGuidelines(Guidelines.ON)
               setOutputCompressFormat(CompressFormat.PNG)
           }
       )
   }
}

Using CropView

  1. Add CropImageView into your activity
">

<com.canhub.cropper.CropImageView
  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
val cropped: Bitmap = cropImageView.getCroppedImage()

Extend to make a custom activity

If you want to extend the CropImageActivity please be aware you will need to setup your CropImageView You can check a sample code in this project com.canhub.cropper.sample.extend_activity.app.ExtendActivity

  • Add CropImageActivity into your AndroidManifest.xml
">
<activity android:name="com.canhub.cropper.CropImageActivity"
  android:theme="@style/Base.Theme.AppCompat"/> 
  • Setup your CropImageView after call super.onCreate(savedInstanceState)
override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setCropImageView(binding.cropImageView)
}

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, Oval (square/circle by fixing aspect ratio), as well as rectangular modes which only allow vertical or horizontal cropping.
  • Cropping window aspect ratio: Free, 1:1, 4:3, 16:9 or Custom.
  • Guidelines appearance: Off / Always On / Show on Touch.
  • Cropping window Border line, border corner and guidelines thickness and color.
  • Cropping background color.

For more information, see the GitHub Wiki.

Posts

License

Forked from ArthurHub Originally forked from edmodo/cropper.

Copyright 2016, Arthur Teplitzki, 2013, Edmodo, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Comments
  • Cannot resolve method 'getUri' in 'ActivityResult'

    Cannot resolve method 'getUri' in 'ActivityResult'

    I have 2 fragments Add and Profile and I have public void onActivityResult in both of them. I get same errors in both of them: Uri image = result.getUri(); and Uri uri = result.getUri(); can you help me fix it? Screenshot (340) Screenshot (341)

    opened by kmrn777 51
  • [BUG] - MIUI (Xiaomi) cant pick image from gallery

    [BUG] - MIUI (Xiaomi) cant pick image from gallery

    Phone Model: Xiomi Redmi K20 Pro Version: Android 11 (RQ1.200826.002) CanHub Version: 3.3.5

    I tried your sample project & run it. But it didn't work on my phone. Also, I uploaded a video for the issue.

    https://www.youtube.com/watch?v=MY-bo92LFeo

    Please check & replay.

    opened by alpesh76 28
  • [BUG] - Not working on Android 11

    [BUG] - Not working on Android 11

    ๐Ÿšจ๐Ÿšจ Not working in android 11

    • Lib Version 3.2.2

    Not working on my device (Poco M2 Pro Android 11 MIUI 12.0.1). CropView doesn't open after chosing the image, neither from gallery nor from camera. The activity simply gets finished. In the sample code it works when "Outside Camera and Start(Uri)' is selected. In the rest of the cases (refer sample code) it throws following error: --Library Camera, Start(), Custom Option : "cropping image was cancelled by the user" --Custom Selector Title... : "picking image failed" --Library show pick option... : "picking image failed"

    To Reproduce Steps to reproduce the behavior:

    1. Launch the sample app
    2. Click on "Sample CallingCrop Image"
    3. Click on "Library, Camera, Start(), Custom Option"
    4. Pick image from gallery or click using camera
    5. See the toast message

    Expected behavior CropView should open on clicking the image in the gallery or after clicking on done icon if clicked from camera and uri should be returned in the required activity

    **Smartphone **

    • Device: Poco M2 Pro (MIUI 12.0.1)
    • OS: Android 11

    Additional context In parseResult method in PickImageContract class the result code is always 0 so the Activity.RESULT_CANCELED is called everytime. Also in CropImageActivity: private val pickImage: ActivityResultLauncher = registerForActivityResult(PickImageContract()) { onPickImageResult(it) } The returned Uri is always null

    opened by ankiitdev 28
  • [hacktoberfest] - image pick option

    [hacktoberfest] - image pick option

    Description

    Today the user can use the library to pick images from camera, gallery or documents

    But the user cannot select that is from camera only, for example. So we need to add a parameter to the contract that define which intents we will use for selection.

    Possible solution:

    PickImageContract would receive a data class, like we have in CropImageContract and this data class will contain booleans for each type of selection camera/gallery/etc in the case that if you only choose one it open directly

    opened by Canato 22
  • [BUG] - NPE when accepting a photo on Android 11

    [BUG] - NPE when accepting a photo on Android 11

    • 2.0.3

    Describe the bug A user that opts to take a photo can capture a picture and upon accepting the photo (aka, tapping on the check mark) they are returned to destination that launched CropImageActivity.

    What's happening is an NPE is thrown (see below) when user accepts the photo, CropImageActivity.onActivityResult is called with resultCode == RESULT_CANCELED.

    2021-02-10 09:45:14.860 6815-6815/? E/CAM_StateMachine: Failed to process event: com.android.camera.captureintent.event.EventTapOnConfirmPhotoButton@f96e55

    2021-02-10 09:45:14.861 6815-6815/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.android.camera2, PID: 6815 java.lang.NullPointerException at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:890) at com.google.common.base.Optional.of(Optional.java:103) at com.android.camera.captureintent.state.StateSavingPicture.onEnter(StateSavingPicture.java:77) at com.android.camera.captureintent.stateful.StateMachineImpl.jumpToState(StateMachineImpl.java:62) at com.android.camera.captureintent.stateful.StateMachineImpl.processEvent(StateMachineImpl.java:110) at com.android.camera.captureintent.state.StateOpeningCamera$9.onClick(StateOpeningCamera.java:307) at android.view.View.performClick(View.java:7448) at android.view.View.performClickInternal(View.java:7425) at android.view.View.access$3600(View.java:810) at android.view.View$PerformClick.run(View.java:28305) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

    To Reproduce Steps to reproduce the behavior:

    1. From CropImageActivity, select Camera option
    2. Accept permissions if needed
    3. Take photo
    4. Accept Photo
    5. CropImageActivity is cancelled, NPE reported above is thrown.

    Expected behavior

    1. From CropImageActivity, select Camera option
    2. Accept permissions if needed
    3. Take photo
    4. Accept Photo
    5. CropImageActivity proceeds to crop image

    Screenshots N/A

    Smartphone (please complete the following information):

    • Device: Emulator, Pixel 3a
    • OS: API 30

    Additional context Add any other context about the problem here.

    opened by hlupico 22
  • Error: open failed: ENOENT (No such file or directory)

    Error: open failed: ENOENT (No such file or directory)

    • Lib Version : 2.2.2

    After cropping image i found this issue that says Error: open failed: ENOENT (No such file or directory)

    To Reproduce Steps to reproduce the behavior:

    1. After setup library
    2. Start CropImageActivity
    3. Then crop image then it will show

    Expected behavior In previous library of https://github.com/edmodo/cropper its working fine but in your library its showing above error

    Screenshots image

    Smartphone :

    • Device: Infinix note 7
    • OS: 10
    opened by immujahidkhan 20
  • Gallery option is not showing

    Gallery option is not showing

    Screenshot_2020-12-21-19-41-11-983_android

    Android 10

    Using Android Studio 3.6.3

    I followed the steps as given but only camera and file options show up in the intent . The gallery option is not visible.I am also using the latest version of the library.

    opened by Viral891 19
  • [BUG] - Unable to Crop image from Uri

    [BUG] - Unable to Crop image from Uri

    • Lib Version [e.g. 3.0.0]

    Describe the bug First of all I would like to thank everyone involved in this library for the great work you have done. Well done.

    I am currently using this library in a project where I have a personalized interface where the user can take a photo. When he takes the picture I take this uri and send it to another screen to edit the image. On this screen I have a button to crop the image, which is where I call the CropImage.

    This is the contract:

    fun createCropImageContract(uri: Uri): ActivityResultContract<Any?, Uri?> {
                return object : ActivityResultContract<Any?, Uri?>() {
                    override fun createIntent(context: Context, input: Any?): Intent {
                        return CropImage
                            .activity(uri)
                            .getIntent(context)
                    }
    
                    override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
                        return CropImage.getActivityResult(intent)?.uriContent
                    }
                }
            }
    

    However, when I call the method, the CropImage's Activity is called and is immediately closed returning the Uri as null.

    This is what I was able to see in the log (I don't know if it's related but it appears every time I press the button) :

    2021-04-14 09:48:08.723 3211-3211/? E/[IndicatorGarden]Presenter: onGardenApplyWindowInsets() New DisplayCutout is NULL!!
    2021-04-14 09:48:08.725 3211-3211/? E/SystemUIImageView: set Image Drawable!!
    2021-04-14 09:48:08.725 3211-3211/? E/SystemUIImageView: set Background Drawable!!
    2021-04-14 09:48:08.729 3211-3211/? E/[IndicatorGarden]Presenter: onGardenApplyWindowInsets() New DisplayCutout is NULL!!
    2021-04-14 09:48:08.786 3211-3211/? E/[IndicatorGarden]Presenter: onGardenApplyWindowInsets() New DisplayCutout is NULL!!
    2021-04-14 09:48:08.788 3211-3211/? E/SystemUIImageView: set Image Drawable!!
    2021-04-14 09:48:08.788 3211-3211/? E/SystemUIImageView: set Background Drawable!!
    2021-04-14 09:48:08.792 3211-3211/? E/[IndicatorGarden]Presenter: onGardenApplyWindowInsets() New DisplayCutout is NULL!!
    

    I have another feature which is the creation of a profile, there I call this contract and everything is working correctly:

    fun createCropImageContract(): ActivityResultContract<Any?, Uri?> {
                return object : ActivityResultContract<Any?, Uri?>() {
                        override fun createIntent(context: Context, input: Any?): Intent {
                            return CropImage
                                .activity()
                                .getIntent(context)
                        }
    
                        override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
                            return CropImage.getActivityResult(intent)?.uriContent
                        }
                    }
            }
    

    The problem is only when I already send Uri directly. Am I doing something wrong?

    To Reproduce Call CropImage Passing the Uri from fragment:

    CropImage
                            .activity(uri)
                            .getIntent(context)
                    }
    

    Expected behavior Open the CropImage activity to crop the provided Uri

    Screenshots If applicable, add screenshots to help explain your problem.

    Smartphone (please complete the following information):

    • Pixel 2 XL Android 11
    • Samsung Galaxy S9+ Android 10

    Additional context

    opened by felipecs81 17
  • Crop is not working when I click Image from camera In Android 11

    Crop is not working when I click Image from camera In Android 11

    getting Null in intent data while clicking the image from the camera in Android 11 below in data i'm getting null in intent data @Override @SuppressLint("NewApi") protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        // handle result of pick image chooser
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE) {
            if (resultCode == Activity.RESULT_CANCELED) {
                // User cancelled the picker. We don't have anything to crop
                setResultCancel();
    
            }
    
            if (resultCode == Activity.RESULT_OK) {
                mCropImageUri = CropImage.getPickImageResultUri(this, data);
                savedState.putString("mCropImageUri", mCropImageUri.toString());
    
                // For API >= 23 we need to check specifically that we have permissions to read external
                // storage.
                if (CropImage.isReadExternalStoragePermissionsRequired(this, mCropImageUri)) {
                    // request permissions and handle the result in onRequestPermissionsResult()
                    requestPermissions(
                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                            CropImage.PICK_IMAGE_PERMISSIONS_REQUEST_CODE);
                } else {
                    // no permissions required or already grunted, can start crop image activity
                    mCropImageView.setImageUriAsync(mCropImageUri);
                }
            }
        } else {
            Toast.makeText(CropImageActivity.this, "Pressed Back", Toast.LENGTH_SHORT).show();
            finish();
    
        }
    
    }
    
    opened by akkie2106 17
  • [BUG] - setOnCropImageCompleteListener does not work

    [BUG] - setOnCropImageCompleteListener does not work

    • Lib Version 3.3.6

    Describe the bug setOnCropImageCompleteListener does not work Lambda function never gets called.

    To Reproduce use the CropImageView, then: create a Lambda function:

    binding.cropImageView.setOnCropImageCompleteListener{ view, result ->
        Log.d("imageComplete", "does this even get called")
    }
    

    notice that it never gets called when moving and scaling the crop region.

    Expected behavior Lambda should get called when releasing the cropping rectangle so that the selected region can be automatically refreshed into i.E. a Preview Drawable

    Media

    Smartphone (please complete the following information):

    • Device: Xiaomi Mix 2S and Pixel 4 Emulator
    • OS: Android 10 MIUI 12.5 and Android 10 with Play Services
    opened by kingspride 16
  • [BUG] - Null bitmap provided to OnCropImageCompleteListener

    [BUG] - Null bitmap provided to OnCropImageCompleteListener

    • Lib Version [e.g. 3.3.4-4.2.1]

    Describe the bug I've upgraded the library and now I'm getting null bitmap in CropResult provided to the listener set using setOnCropImageCompleteListener. Interestingly isSuccessful is true and error is null.

    The project is using CropImageView integration. The only change I needed to do when updating was to change getCroppedImageAsync() to croppedImageAsync().

    The project is using Java 8, had issues upgrading it to Java 11. The files integrating with the library are in Kotlin. Not sure if it's not Java 8 issue but I would expect any such issues to be more likely build-time issues, not such an odd runtime issue of bitmap being null right at the end of the flow.

    To Reproduce Steps to reproduce the behavior:

    1. Use view integration
    2. setOnCropImageCompleteListener
    3. setImageBitmap
    4. croppedImageAsync()

    Expected behavior cropResult.bitmap provided to the listener should not be null

    Please help/advise.

    needs-info 
    opened by marekoid 15
  • Rotate image improvements

    Rotate image improvements

    I was developing a feature where I need to rotate the image by a specific angle, but I realized that the rotateImage function wasn't working correctly, when I was aligning it to any side and trying to go back one or two degrees it didn't work correctly correct. I decided to see how it was being done and made the correction, I recorded two videos, the first is showing how it is currently and the second has already been corrected and working correctly.

    before adjusting the method:

    https://user-images.githubusercontent.com/90324370/207723300-12ecdf70-092d-4bd1-88b1-60ca77241880.mp4

    after adjusting the method:

    https://user-images.githubusercontent.com/90324370/207723267-0bc07486-5a05-406c-ba43-a6b2d0d9d131.mp4

    I also noticed that it would be more interesting to change the parameter type from integer to float, in case someone wants to develop a feature using a range of values and these values have values of type float.

    if you approve such changes, I can open a PR and it will have all the changes that were made

    opened by filipiandrader 5
  • Crash when set allowFlipping to false

    Crash when set allowFlipping to false

    Hi! When configuring the CropImageContractOptions and setting allowFlipping = false I encountered a crash. Here's my code:

    cropImage.launch(
                CropImageContractOptions(
                    uri = null,
                    cropImageOptions = CropImageOptions(
                        imageSourceIncludeGallery = true,
                        imageSourceIncludeCamera = true,
                        showIntentChooser = true,
                        toolbarColor = colorWhite,
                        toolbarBackButtonColor = colorBlack,
                        activityMenuTextColor = colorBlack,
                        activityMenuIconColor = colorBlack,
                        progressBarColor = colorAccent,
                        guidelinesColor = colorAccent,
                        borderCornerColor = colorAccent,
                        borderLineColor = colorAccent,
                        minCropResultHeight = resources.getDimensionPixelSize(R.dimen.photo_min_height),
                        minCropWindowWidth = binding.photoClImage.width,
                        allowFlipping = false
                    )
                )
            )
    

    And stacktrace:

    java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.CharSequence android.view.MenuItem.getTitle()' on a null object reference
                                                                                                        	at com.canhub.cropper.CropImageActivity.updateMenuItemTextColor(CropImageActivity.kt:454)
                                                                                                        	at com.canhub.cropper.CropImageActivity.onCreateOptionsMenu(CropImageActivity.kt:288)
                                                                                                        	at android.app.Activity.onCreatePanelMenu(Activity.java:4322)
                                                                                                        	at androidx.activity.ComponentActivity.onCreatePanelMenu(ComponentActivity.java:521)
                                                                                                        	at androidx.appcompat.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:95)
                                                                                                        	at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.onCreatePanelMenu(AppCompatDelegateImpl.java:3122)
                                                                                                        	at androidx.appcompat.app.AppCompatDelegateImpl.preparePanel(AppCompatDelegateImpl.java:1913)
                                                                                                        	at androidx.appcompat.app.AppCompatDelegateImpl.doInvalidatePanelMenu(AppCompatDelegateImpl.java:2194)
                                                                                                        	at androidx.appcompat.app.AppCompatDelegateImpl$2.run(AppCompatDelegateImpl.java:276)
                                                                                                        	at android.os.Handler.handleCallback(Handler.java:938)
                                                                                                        	at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        	at android.os.Looper.loop(Looper.java:236)
                                                                                                        	at android.app.ActivityThread.main(ActivityThread.java:8057)
                                                                                                        	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
    
    opened by oleksandr-koba-hhl 1
  • [Feat] - One Degree Rotation

    [Feat] - One Degree Rotation

    The library today already rotate images using 90, 180, 270 and 360 angles

    The goal is to be able to rotate it by 1 degree difference.

    For that will be need to auto zoom crop the image:

    • Let's say the CropOverlay is the same size as the image.
    • When we rotate 5 degrees it will be getting "outside" image area
    • So is need to push the CropOverlay inside and create new limits

    Add ui rotation selector, like a carrousel from 0-360

    opened by Canato 9
Releases(4.5.0)
Owner
CanHub
Open Source libraries that will always be maintained, join us. Logo designer: +55619911193
CanHub
Image Cropping Library for Android

Image Cropping Library for Android

Lyrebird Studio 1.1k Dec 30, 2022
Image cropping library written with Jetpack Compose with other Composables such as ImageWithConstraints scales Bitmap

Image cropping library written with Jetpack Compose with other Composables such as ImageWithConstraints scales Bitmap it displays and returns position and bounds of Bitmap and ImageWithThumbnail to display thumbnail of the image on selected corner.

Smart Tool Factory 9 Jul 27, 2022
Photo picker library for android. Let's you pick photos directly from files, or navigate to camera or gallery.

ChiliPhotoPicker Made with โค๏ธ by Chili Labs. Library made without DataBinding, RxJava and image loading libraries, to give you opportunity to use it w

Chili Labs 394 Nov 29, 2022
Android widget for cropping and rotating an image.

Cropper The Cropper is an image cropping tool. It provides a way to set an image in XML and programmatically, and displays a resizable crop window on

Edmodo 2.9k Nov 14, 2022
A small customizable library useful to handle an gallery image pick action built-in your app. :sunrise_over_mountains::stars:

Louvre A small customizable image picker. Useful to handle an gallery image pick action built-in your app. *Images from Google Image Search Installati

Andrรฉ Mion 640 Nov 19, 2022
Awesome Image Picker library will pick images/gifs with beautiful interface. Supports image or gif, Single and Multiple Image selection.

Awesome Image Picker Awesome Image Picker library will pick images/gifs with beautiful interface. Supports image or gif, Single and Multiple Image sel

Prabhakar Thota 162 Sep 13, 2022
Android library project for cropping images

I guess people are just cropping out all the sadness An Android library project that provides a simple image cropping Activity, based on code from AOS

Jamie McDonald 4.5k Jan 7, 2023
This is an Image slider with swipes, Here we used Volley to Image load URL's from JSON! Here we make it very easy way to load images from Internet and We customized the description font style(OpenSans).

ImageSliderWithSwipes This is an Image slider with swipes, Here we used Volley to load URL's from JSON! Here we make it very easy way to load images f

Prabhakar Thota 44 May 31, 2021
Android Camera Application for Exposure Fusion Algorithm and more

Android Camera Application for Exposure Fusion Algorithm and more

Seri Lee 10 Nov 14, 2021
๐Ÿ”ฅ Android OpenGL Camera 2.0 ๅฎž็Žฐ 30 ็งๆปค้•œๅ’ŒๆŠ–้Ÿณ็‰นๆ•ˆ

OpenGLCamera2 Android OpenGL Camera 2.0 ้กน็›ฎไฝฟ็”จ OpenGL ES 3.0 ๅฎž็Žฐ 30 ็ง็›ธๆœบๆปค้•œๅ’Œ็‰นๆ•ˆ๏ผŒๆ”ฏๆŒ็›ธๆœบ้ข„่งˆๅ’Œๆ‹็…ง๏ผŒๅทฆๅณๆป‘ๅŠจๅˆ‡ๆขๆปค้•œใ€‚ ๅฏน OpenGL ES 3.0 ไธ็†Ÿๆ‚‰็š„ๅŒๅญฆๅฏไปฅ็งปๆญฅ Android OpenGLES 3.0 ๅผ€ๅ‘็ณป็ปŸๆ€งๅญฆไน ๆ•™

ๅญ—่Š‚ๆตๅŠจ 794 Dec 23, 2022
Bring out the best in your phone's camera

DNG Processor How does this app work? It waits for new RAW images captured using a supported camera app, and then processes them in the background. It

Amir Zaidi 97 Dec 15, 2022
An android image compression library.

Compressor Compressor is a lightweight and powerful android image compression library. Compressor will allow you to compress large photos into smaller

Zetra 6.7k Dec 31, 2022
Customizable Android full screen image viewer for Fresco library supporting "pinch to zoom" and "swipe to dismiss" gestures. Made by Stfalcon

This project is no longer supported. If you're able to switch from Fresco to any other library that works with the Android's ImageView, please migrate

Stfalcon LLC 1.8k Dec 19, 2022
Dali is an image blur library for Android. It contains several modules for static blurring, live blurring and animations.

Dali Dali is an image blur library for Android. It is easy to use, fast and extensible. Dali contains several modules for either static blurring, live

Patrick Favre-Bulle 1k Dec 1, 2022
An image resizing library for Android

Resizer Inspired by zetbaitsu's Compressor, Resizer is a lightweight and easy-to-use Android library for image scaling. It allows you to resize an ima

Kakit Ho 426 Dec 22, 2022
Simple android image popup Library

Android Image Popup Show image as a popup on a click event or any event. Simply set the image as drawable and thats it!!!. And also you can set width,

Chathura Lakmal 64 Nov 15, 2022
Image loading library for Android

Image Loader Image loader library for Android. Deprecated. See Glide. Features Image transformations Automatic memory and storage caching Ability to l

Yuriy Budiyev 19 May 28, 2022
An image loading library for android.

Bilder Download Add following to your project's build.gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } }

Kshitij Sharma 4 Jan 1, 2022
An Android transformation library providing a variety of image transformations for Coil, Glide, Picasso, and Fresco.

An Android transformation library providing a variety of image transformations for Coil, Glide, Picasso, and Fresco.

Daichi Furiya 257 Jan 2, 2023