Dali is an image blur library for Android. It contains several modules for static blurring, live blurring and animations.

Overview

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 blurring and animations. It uses RenderScript internally (although different implementations can be chosen) and is heavily cached to be fast and keeps small memory footprint. It features a lot of additional image filters and may be easily extended and pretty every configuration can be changed.

Download Build Status Javadocs Android Arsenal Maintainability

Gallery

Note: This library is in prototype state and not ready for prime time. It is mostly feature complete (except for the animation module) although bugs are to be expected.

Install

Add the following to your dependencies (add jcenter to your repositories if you haven't)

   dependencies {
        compile 'at.favre.lib:dali:0.4.0'
   }

Then add the following to your app's build.gradle to get Renderscript to work

android {
    ...
    defaultConfig {
        ...
        renderscriptTargetApi 24
        renderscriptSupportModeEnabled true
    }
}

The quickest way to discover possible features, is to see what builder methods Dali.create(context) contains.

Download Test App

Get it on Google Play

The test app is in the Playstore, you can get it here Dali Test App.

Features

Static Blur

Static blur refers to blurring images that do not change dynamically in the UI (e.g. a static background image). Dali uses the builder pattern for easy and readable configuration. A very simple example would be:

    Dali.create(context).load(R.drawable.test_img1).blurRadius(12).into(imageView);

which would blur given image in a background thread and set it to the ImageView. Dali also supports additional image manipulation filters i.e. brightness, contrast and color.

Most of them use RenderScript so they should be reasonably fast, although check compatibility. For details on the filter implementation see the at.favre.lib.dali.builder.processor package.

Any other manipulation filter can be implemented through the IBitmapProcessor and .addPreProcessor on a builder.

A more complex example including filters would be:

    Dali.create(context).load(R.drawable.test_img1).placeholder(R.drawable.test_img1).blurRadius(12)
        .downScale(2).colorFilter(Color.parseColor("#ffccdceb")).concurrent().reScale().into(iv3)

This will blur, color filter a downscaled version of given image on a concurrent thread pool and rescales it the target (the imageView) this case and will set a placeholder until the operations are finished.

Do note that Dali.create(context) will always create a new instance, so it may be advisable to keep the reference.

For more examples, see SimpleBlurFragment.java and SimpleBlurBrightnessFragment.java

Blur any View

Apart from resource ids, bitmaps, files and InputStreams .load(anyAndroidView) method also loads any View as source and blurs its drawingCache into the target view.

   		Dali.create(context).load(rootView.findViewById(R.id.blurTemplateView)).blurRadius(20)
   		    .downScale(2).concurrent().reScale().skipCache().into(imageView);

For more examples, see ViewBlurFragment.java

Skip blurring

If you want to utilize Dali's features, without blurring the image you could do:

    Dali.create(context).load(R.drawable.test_img1).algorithm(EBlurAlgorithm.NONE).brightness(70).concurrent().into(iv);

Live Blur

Live blur refers to an effect where it a portion of the view blurs what's behind it. It can be used with e.g. a ViewPager, Scrollview, RecyclerView, etc.

Live Blur Animation

A very simple example with a ViewPager would be:

    blurWorker = Dali.create(getActivity()).liveBlur(rootViewPagerWrapperView,topBlurView,bottomBlurView).downScale(8).assemble(true);

    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            blurWorker.updateBlurView();
        }
        @Override public void onPageSelected(int position) {}
		@Override public void onPageScrollStateChanged(int state) {}
    });

A full example can be found in the test app's LiveBlurFragment.java

The idea is basically to hook up to the scrollable view and every scroll event the blur has to be updated with blurWorker.updateBlurView(). Many of the views do not offer these features, therefore there are simple implementations for some views (see package at.favre.lib.dali.view.Observable*)

Navigation Drawer Background Blur

A specialized version of live blur is blurring the background of a NavigationDrawer:

Blur Nav Animation

    protected void onCreate(Bundle savedInstanceState) {
        ...
		mDrawerToggle = new DaliBlurDrawerToggle(this, mDrawerLayout,
                toolbar, R.string.drawer_open, R.string.drawer_close) {

			public void onDrawerClosed(View view) {
				super.onDrawerClosed(view);
				invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
			}

			public void onDrawerOpened(View drawerView) {
				super.onDrawerOpened(drawerView);
				invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
			}
		};
		mDrawerToggle.setDrawerIndicatorEnabled(true);
		// Set the drawer toggle as the DrawerListener
		mDrawerLayout.addDrawerListener(mDrawerToggle);
        ...
	}

	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		mDrawerToggle.syncState();
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		mDrawerToggle.onConfigurationChanged(newConfig);
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
		return super.onPrepareOptionsMenu(menu);
	}

A full example can be found in the test app's NavigationDrawerActivity.java

Blur Transition Animation

A simple framework for animating a static image from sharp to blur. It uses a keyframes to configure the animation:

    BlurKeyFrameManager man = new BlurKeyFrameManager();
    man.addKeyFrame(new BlurKeyFrame(2,4,0,300));
    man.addKeyFrame(new BlurKeyFrame(2,8,0,300));
    ...

then an ImageView can be animated:

    BlurKeyFrameTransitionAnimation animation = new BlurKeyFrameTransitionAnimation(getActivity(),man);
    animation.start(imageView);

Blur Animation

A full example can be found in the test app's SimpleAnimationFragment.java

The idea is from Roman Nurik's App Muzei where he explains how he does the blur transition smoothly and fast. Instead of just alpha fading the source and the final blur image he creates different keyframes with various states of blur and then fades through all those keyframes. This is a compromise between performance and image quality. See his Google+ blog post for more info.

Note: This module is not feature complete and has still terrible bugs, so use at your own risk.

Proguard

Since v0.3.1 the lib includes it's own proguard consumer rules and should work out of the box with obfuscated builds.

Advanced

How to build

Assemble the lib with the following command line call:

gradlew :dali:assemble

The .aar files can be found in the /dali/build/outputs/aar folder

Caching

TODO

  • fix animations
  • add tests

License

Copyright 2016 Patrick Favre-Bulle

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License 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
  • Unable to publish app to playstore due to no 64-bit support

    Unable to publish app to playstore due to no 64-bit support

    Since app updates are not allowed without including 64-bit support, One of our apps using this library cannot be published to play store as this library doesnt have 64-bit supported native library files (.so). Can you fix this? References: https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html https://developer.android.com/distribute/best-practices/develop/64-bit

    bug 
    opened by mani516 6
  • How to blur view with transparent background

    How to blur view with transparent background

    Hello admin

    I use background is image. Library worked good. But I use background is transparent (#66000000). Library not work. Please help me. thank you very much

           <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/viewBlur"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#66000000"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
    />
    

    and use

      Dali.create(this).load(pageControlProduct).blurRadius(20)
            .downScale(2).concurrent().reScale().skipCache().into(viewBlur);
    
    opened by jackyhieu1211-hn 2
  • How to blur view with transparent background

    How to blur view with transparent background

    Hello admin

    I use background is image not transparent. Library worked good. But I use background is transparent (#66000000) or background is image have background is #66000000 or image only have a color (#000000). Library not work. Please help me. thank you very much

       <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/pageControlProduct"
        android:layout_width="match_parent"
        android:layout_height="@dimen/video_controller_height"
        android:layout_gravity="bottom"
      >
    
      <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/viewBlur"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#66000000" // or @drawable/background_product (#66000000)
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
       />
      </androidx.constraintlayout.widget.ConstraintLayout>
    

    and use

      Dali.create(this).load(pageControlProduct).blurRadius(20)
        .downScale(2).concurrent().reScale().skipCache().into(viewBlur);
    

    or

     Dali.create(this).load(R.drawable.background_product).blurRadius(25).into(viewBlur)
    
    question 
    opened by jackyhieu1211-hn 1
  • [bugfix] new TransitionDrawable memory leak

    [bugfix] new TransitionDrawable memory leak

    [bugfix] new TransitionDrawable point to old drawable array, which cause memory leak

    As we know, TransitionDrawable is a LayerDrawable which contains a array of two drawables need to do transition. But directly use old drawable to create new TransitionDrawable, let the the newly created TransitionDrawable hold a reference to the old array rather than the only drawable.

    placeholder = imageView.getDrawable();
    

    So I break the reference chain and fix like this:

                                    Drawable oldDrawable = imageView.getDrawable();
                                    if (oldDrawable != null) {
                                        if (oldDrawable instanceof LayerDrawable) {
                                            LayerDrawable oldLayerDrawable = (LayerDrawable) oldDrawable;
                                            placeholder = oldLayerDrawable.getDrawable(0);
                                        } else {
                                            placeholder = imageView.getDrawable();
                                        }
                                    } 
    

    Please review that, and I hope you may accept this pr.

    opened by buptfarmer 1
  • Could not find method renderscriptTargetApi()

    Could not find method renderscriptTargetApi()

    After adding this:

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"
        renderscriptTargetApi 20
        renderscriptSupportModeEnabled true
    ...
    

    gradle return error:

    Error:(22, 0) Could not find method renderscriptTargetApi() for arguments [20] on project ':app' of type org.gradle.api.Project.
    <a href="openFile:D:\Projects\Test\app\build.gradle">Open File</a>
    
    opened by Kolyall 1
  • Usage on Jetpack Compose

    Usage on Jetpack Compose

    There isn't a straightforward way to use this on Jetpack Compose yet. Could it be possible to provide a Composable component that can use the Dali library? Thank you!

    opened by ComposeDesigner 0
  • Build/Release Issue: Bintray Plugin not working

    Build/Release Issue: Bintray Plugin not working

    See: https://travis-ci.org/github/patrickfav/Dali/builds/698058500

    > Task :dali:bintrayUpload
    Task :dali:bintrayUpload in app Starting
    Caching disabled for task ':dali:bintrayUpload' because:
      Caching has not been enabled for the task
    Task ':dali:bintrayUpload' is not up-to-date because:
      Task has not declared any outputs despite executing actions.
    Gradle Bintray Plugin version: 1.8.5
    Version 'patrickfav/maven/dali/0.4.0' does not exist. Attempting to create it...
    Created version '0.4.0'.
    Uploading to https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0.pom...
    Uploaded to 'https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0.pom'.
    Uploading to https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0-javadoc.jar...
    Uploaded to 'https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0-javadoc.jar'.
    Uploading to https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0-sources.jar...
    Uploaded to 'https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0-sources.jar'.
    Uploading to https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0.aar...
    Uploaded to 'https://api.bintray.com/content/patrickfav/maven/dali/0.4.0/at/favre/lib/dali/0.4.0/dali-0.4.0.aar'.
    Task :dali:bintrayUpload in app Finished
    :dali:bintrayUpload (Thread[main,5,main]) completed. Took 16.645 secs.
    :bintrayUpload (Thread[Execution worker for ':',5,main]) started.
    > Task :bintrayUpload
    Task :bintrayUpload in app Starting
    Caching disabled for task ':bintrayUpload' because:
      Caching has not been enabled for the task
    Task ':bintrayUpload' is not up-to-date because:
      Task has not declared any outputs despite executing actions.
    Gradle Bintray Plugin version: 1.8.5
    Repository name, package name or version name are null for project: root project 'Dali'
    Task :bintrayUpload in app Finished
    :bintrayUpload (Thread[Execution worker for ':',5,main]) completed. Took 0.006 secs.
    :bintrayPublish (Thread[Execution worker for ':',5,main]) started.
    > Task :bintrayPublish FAILED
    Task :bintrayPublish in app Starting
    Caching disabled for task ':bintrayPublish' because:
      Caching has not been enabled for the task
    Task ':bintrayPublish' is not up-to-date because:
      Task has not declared any outputs despite executing actions.
    Task :bintrayPublish in app Finished
    :bintrayPublish (Thread[Execution worker for ':',5,main]) completed. Took 0.017 secs.
    FAILURE: Build failed with an exception.
    * What went wrong:
    Execution failed for task ':bintrayPublish'.
    > java.lang.NullPointerException (no error message)
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.
    * Get more help at https://help.gradle.org
    Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
    Use '--warning-mode all' to show the individual deprecation warnings.
    See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings
    BUILD FAILED in 32s
    30 actionable tasks: 9 executed, 21 up-to-date
    Script failed with status 1
    
    buildbug 
    opened by patrickfav 0
  • Crash when using HARDWARE bitmap

    Crash when using HARDWARE bitmap

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            GlobalScope.launch(Dispatchers.IO) {
                val url = "https://upload.wikimedia.org/wikipedia/commons/a/ad/Gretag-Macbeth_ColorChecker.jpg"
                val stream = URL(url).openStream()
                val bitmap = BitmapFactory.decodeStream(stream)
                    .copy(Bitmap.Config.HARDWARE, false)
    
                Dali.create(this@MainActivity)
                    .load(bitmap)
                    .skipCache()
                    .blurRadius(12)
                    .into(image);
            }
        }
    }
    
    2020-06-12 20:31:48.532 23211-23211/com.example.myapplication E/BlurBuilder: Could not set into imageview
        at.favre.lib.dali.builder.exception.BlurWorkerException: androidx.renderscript.RSInvalidStateException: Bad bitmap type: HARDWARE
            at at.favre.lib.dali.builder.blur.BlurWorker.process(BlurWorker.java:153)
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:48)
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:27)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
            at java.lang.Thread.run(Thread.java:798)
         Caused by: androidx.renderscript.RSInvalidStateException: Bad bitmap type: HARDWARE
            at androidx.renderscript.Allocation.elementFromBitmap(Allocation.java:2654)
            at androidx.renderscript.Allocation.typeFromBitmap(Allocation.java:2659)
            at androidx.renderscript.Allocation.createFromBitmap(Allocation.java:2696)
            at androidx.renderscript.Allocation.createFromBitmap(Allocation.java:2749)
            at at.favre.lib.dali.blur.algorithms.RenderScriptGaussianBlur.blur(RenderScriptGaussianBlur.java:24)
            at at.favre.lib.dali.builder.blur.BlurWorker.process(BlurWorker.java:129)
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:48) 
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:27) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
            at java.lang.Thread.run(Thread.java:798) 
    
    bug help wanted 
    opened by diegor2 4
  • The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS

    The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS

    Installation did not succeed. The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS Installation failed due to: 'null'

    how can i fix this ?

    bug 
    opened by AnthonyKoueik 1
  • Failed resolution of: Lcom/jakewharton/disklrucache/DiskLruCache;

    Failed resolution of: Lcom/jakewharton/disklrucache/DiskLruCache;

    ~~Might be related to #14~~

    Code

    Dali.create(this).load(R.drawable.ic_launcher_background).blurRadius(10).into(imgBackground)
    

    Stacktrace

    2019-07-26 16:55:46.462 31292-31292/com.marknjunge.blurryshadow E/BlurBuilder: Could not set into imageview
        at.favre.lib.dali.builder.exception.BlurWorkerException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/jakewharton/disklrucache/DiskLruCache;
            at at.favre.lib.dali.builder.blur.BlurWorker.process(BlurWorker.java:153)
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:48)
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:27)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
            at java.lang.Thread.run(Thread.java:764)
         Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/jakewharton/disklrucache/DiskLruCache;
            at at.favre.lib.dali.builder.TwoLevelCache.getDiskCache(TwoLevelCache.java:72)
            at at.favre.lib.dali.builder.TwoLevelCache.getFromDiskCache(TwoLevelCache.java:147)
            at at.favre.lib.dali.builder.TwoLevelCache.get(TwoLevelCache.java:97)
            at at.favre.lib.dali.builder.blur.BlurWorker.process(BlurWorker.java:73)
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:48) 
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:27) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
            at java.lang.Thread.run(Thread.java:764) 
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.jakewharton.disklrucache.DiskLruCache" on path: DexPathList[[zip file "/data/app/com.marknjunge.blurryshadow-Vc6sW-Lf0gDW7QCdqIz8GA==/base.apk"],nativeLibraryDirectories=[/data/app/com.marknjunge.blurryshadow-Vc6sW-Lf0gDW7QCdqIz8GA==/lib/arm, /data/app/com.marknjunge.blurryshadow-Vc6sW-Lf0gDW7QCdqIz8GA==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:169)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at at.favre.lib.dali.builder.TwoLevelCache.getDiskCache(TwoLevelCache.java:72) 
            at at.favre.lib.dali.builder.TwoLevelCache.getFromDiskCache(TwoLevelCache.java:147) 
            at at.favre.lib.dali.builder.TwoLevelCache.get(TwoLevelCache.java:97) 
            at at.favre.lib.dali.builder.blur.BlurWorker.process(BlurWorker.java:73) 
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:48) 
            at at.favre.lib.dali.builder.blur.BlurWorker.call(BlurWorker.java:27) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
            at java.lang.Thread.run(Thread.java:764) 
    
    bug help wanted 
    opened by MarkNjunge 6
Releases(v0.4.0)
Owner
Patrick Favre-Bulle
Computer Science MSc @ TUWien 2015. Going through the stack: JS Frontend, Android Mobile, Spring/Kotlin type backend. Interested in most topics cryptography
Patrick Favre-Bulle
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
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
Library to save image locally and shows options to open and share !

Image Save and Share Library to save image locally and shows options to open and share ! Download Demo APK from HERE Kindly use the following links to

Prabhakar Thota 27 Apr 18, 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
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
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
A simple image cropping library for Android.

SimpleCropView The SimpleCropView is an image cropping library for Android. It simplifies your code for cropping image and provides an easily customiz

Issei Aoki 2.5k Dec 28, 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
Image Cropping Library for Android, optimised for Camera / Gallery.

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

CanHub 812 Dec 30, 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
🎨 Modern image loading library for Android. Simple by design, powerful under the hood.

Simple Image Loader Modern image loading library for Android. Simple by design, powerful under the hood. Kotlin: Simple Image Loader is Kotlin-native

Igor Solkin 8 Nov 21, 2022
Image Cropping Library for Android

Image Cropping Library for Android

Lyrebird Studio 1.1k Dec 30, 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
RoundedImageView-Library 0.9 0.0 Java To set single or multiple corners on Image Views.

RoundedImageView-Library Rounded ImageView Android Library, to set single or multiple corners on imageview. Screenshot Usage Step 1. Add the JitPack r

Dushyant Mainwal 15 Sep 2, 2020
A library for image manipulation with power of renderScript which is faster than other ordinary solutions.

Pixl is a library for image manipulation with power of renderScript which is faster than other ordinary solutions, currently it includes three basic scripts, brightness, contrast, saturation.

Jibran Iqbal 20 Jan 23, 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
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