An Android library for managing images and the memory they use.

Related tags

Image Loader fresco
Overview

Fresco

Fresco Logo

Build Status License

Fresco is a powerful system for displaying images in Android applications.

Fresco takes care of image loading and display, so you don't have to. It will load images from the network, local storage, or local resources, and display a placeholder until the image has arrived. It has two levels of cache; one in memory and another in internal storage.

In Android 4.x and lower, Fresco puts images in a special region of Android memory. This lets your application run faster - and suffer the dreaded OutOfMemoryError much less often.

Fresco also supports:

  • streaming of progressive JPEGs
  • display of animated GIFs and WebPs
  • extensive customization of image loading and display
  • and much more!

Find out more at our website.

Requirements

Fresco can be included in any Android application.

Fresco supports Android 2.3 (Gingerbread) and later.

Using Fresco in your application

If you are building with Gradle, simply add the following line to the dependencies section of your build.gradle file:

implementation 'com.facebook.fresco:fresco:2.4.0'

For full details, visit the documentation on our web site, available in English, Chinese, and Korean:

Join the Fresco community

Please use our issues page to let us know of any problems.

For pull requests, please see the CONTRIBUTING file for information on how to help out. See our documentation for information on how to build from source.

License

Fresco is MIT-licensed.

Comments
  • UnsatisfiedLinkError: couldn't find

    UnsatisfiedLinkError: couldn't find "libmemchunk.so"

    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.blink.academy.fork-1/base.apk"],nativeLibraryDirectories=[/data/app/com.blink.academy.fork-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libmemchunk.so"
        at java.lang.Runtime.loadLibrary(Runtime.java:366)
        at java.lang.System.loadLibrary(System.java:989)
        at com.facebook.common.soloader.SoLoaderShim$DefaultHandler.loadLibrary(SoLoaderShim.java:34)
        at com.facebook.common.soloader.SoLoaderShim.loadLibrary(SoLoaderShim.java:56)
        at com.facebook.imagepipeline.memory.NativeMemoryChunk.(NativeMemoryChunk.java:36)
        at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:60)
        at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:22)
        at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:260)
        at com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.(NativePooledByteBufferOutputStream.java:53)
        at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newOutputStream(NativePooledByteBufferFactory.java:141)
        at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newOutputStream(NativePooledByteBufferFactory.java:26)
        at com.facebook.imagepipeline.producers.NetworkFetchProducer.onResponse(NetworkFetchProducer.java:95)
        at com.facebook.imagepipeline.producers.NetworkFetchProducer.access$000(NetworkFetchProducer.java:36)
        at com.facebook.imagepipeline.producers.NetworkFetchProducer$1.onResponse(NetworkFetchProducer.java:73)
        at com.blink.academy.fork.fresco.imagepipeline.OkHttpNetworkFetcher$2.onResponse(OkHttpNetworkFetcher.java:96)
        at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:168)
        at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
    
    build 
    opened by xiaoluome 48
  • Windows os How to build?

    Windows os How to build?

    My Environment

    • os : WIndows 7 Ultimake
    • SET ANDROID_HOME=C:\android-sdk-windows
    • SET PATH=C:\android-ndk-r10d;%PATH%

    Run

    • gradlew build

    Result

    FAILURE: Build failed with an exception.

    * What went wrong: Execution failed for task ':imagepipeline:ndk_build_gifimage'.

    A problem occurred starting process 'command 'ndk-build''

    * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED

    ....... ㅜ.ㅡ

    Retry

    • gradlew build -- stacktrace

    Result

    * What went wrong: Execution failed for task ':imagepipeline:ndk_build_gifimage'.

    A problem occurred starting process 'command 'ndk-build''

    * Try: Run with --info or --debug option to get more log output.

    * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':imagepipeline:ndk_build_gifimage'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) ...

    bug 
    opened by PmtPrt 42
  • Change to handle external diskcache and adapted cache size limit care - issue 898

    Change to handle external diskcache and adapted cache size limit care - issue 898

    Hello,

    I made those changes to handle this bug : https://github.com/facebook/fresco/issues/898

    • add isExternal() boolean to check if cache is external or internal.
    • modified updateFileCacheSizeLimit() to handle internal (default) or external diskcache

    Hope it helps, Thanks, Eric

    CLA Signed GH Review: accepted 
    opened by eldk 36
  • Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libnative-imagetranscoder.so caused by: dlopen failed:

    Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libnative-imagetranscoder.so caused by: dlopen failed: "/data/data/com.degoo.android/lib-main/libnative-imagetranscoder.so" is 64-bit instead of 32-bit

    Since a similar issue #2339 was closed, I'd like to know if there's solution for the error below:

    Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libnative-imagetranscoder.so caused by: dlopen failed: "/data/data/com.degoo.android/lib-main/libnative-imagetranscoder.so" is 64-bit instead of 32-bit
           at com.facebook.soloader.SoLoader.doLoadLibraryBySoName + 738(SoLoader.java:738)
           at com.facebook.soloader.SoLoader.loadLibraryBySoName + 591(SoLoader.java:591)
           at com.facebook.soloader.SoLoader.loadLibrary + 529(SoLoader.java:529)
           at com.facebook.soloader.SoLoader.loadLibrary + 484(SoLoader.java:484)
           at com.facebook.imagepipeline.nativecode.NativeJpegTranscoderSoLoader.ensure + 28(NativeJpegTranscoderSoLoader.java:28)
           at com.facebook.imagepipeline.nativecode.NativeJpegTranscoder.(S:47)
           at com.facebook.imagepipeline.nativecode.NativeJpegTranscoderFactory.createImageTranscoder + 35(NativeJpegTranscoderFactory.java:35)
           at com.facebook.imagepipeline.transcoder.MultiImageTranscoderFactory.getNativeImageTranscoder + 70(MultiImageTranscoderFactory.java:70)
           at com.facebook.imagepipeline.transcoder.MultiImageTranscoderFactory.createImageTranscoder + 47(MultiImageTranscoderFactory.java:47)
           at com.facebook.imagepipeline.producers.ResizeAndRotateProducer$TransformingConsumer.onNewResultImpl + 161(ResizeAndRotateProducer.java:161)
           at com.facebook.imagepipeline.producers.ResizeAndRotateProducer$TransformingConsumer.onNewResultImpl + 83(ResizeAndRotateProducer.java:83)
           at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult + 97(BaseConsumer.java:97)
           at com.facebook.imagepipeline.producers.AddImageTransformMetaDataProducer$AddImageTransformMetaDataConsumer.onNewResultImpl + 46(AddImageTransformMetaDataProducer.java:46)
           at com.facebook.imagepipeline.producers.AddImageTransformMetaDataProducer$AddImageTransformMetaDataConsumer.onNewResultImpl + 30(AddImageTransformMetaDataProducer.java:30)
           at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult + 97(BaseConsumer.java:97)
           at com.facebook.imagepipeline.producers.MultiplexProducer$Multiplexer.onNextResult + 452(MultiplexProducer.java:452)
           at com.facebook.imagepipeline.producers.MultiplexProducer$Multiplexer$ForwardingConsumer.onNewResultImpl + 513(MultiplexProducer.java:513)
           at com.facebook.imagepipeline.producers.MultiplexProducer$Multiplexer$ForwardingConsumer.onNewResultImpl + 506(MultiplexProducer.java:506)
           at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult + 97(BaseConsumer.java:97)
           at com.facebook.imagepipeline.producers.EncodedMemoryCacheProducer$EncodedMemoryCacheConsumer.onNewResultImpl + 166(EncodedMemoryCacheProducer.java:166)
           at com.facebook.imagepipeline.producers.EncodedMemoryCacheProducer$EncodedMemoryCacheConsumer.onNewResultImpl + 111(EncodedMemoryCacheProducer.java:111)
           at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult + 97(BaseConsumer.java:97)
           at com.facebook.imagepipeline.producers.DiskCacheReadProducer$1.then + 107(DiskCacheReadProducer.java:107)
           at com.facebook.imagepipeline.producers.DiskCacheReadProducer$1.then + 88(DiskCacheReadProducer.java:88)
           at bolts.Task$14.run + 872(Task.java:872)
           at bolts.BoltsExecutors$ImmediateExecutor.execute + 105(BoltsExecutors.java:105)
           at bolts.Task.completeImmediately + 863(Task.java:863)
           at bolts.Task.access$000 + 32(Task.java:32)
           at bolts.Task$10.then + 654(Task.java:654)
           at bolts.Task$10.then + 651(Task.java:651)
           at bolts.Task.runContinuations + 956(Task.java:956)
           at bolts.Task.trySetResult + 994(Task.java:994)
           at bolts.TaskCompletionSource.trySetResult + 39(TaskCompletionSource.java:39)
           at bolts.TaskCompletionSource.setResult + 62(TaskCompletionSource.java:62)
           at bolts.Task$4.run + 357(Task.java:357)
           at java.util.concurrent.ThreadPoolExecutor.runWorker + 1115(ThreadPoolExecutor.java:1115)
           at java.util.concurrent.ThreadPoolExecutor$Worker.run + 590(ThreadPoolExecutor.java:590)
           at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run + 51(PriorityThreadFactory.java:51)
           at java.lang.Thread.run + 818(Thread.java:818)
    

    I've tried downgrading my Android Gradle plugin with the https://github.com/facebook/SoLoader/issues/29#issuecomment-492929087 suggestion but that gives me build errors about compatibility issues with androidx dependencies like:

    Android dependency 'androidx.core:core' has different version for the compile (1.0.0) and runtime (1.0.1) classpath. You should manually set the same version via DependencyResolution
    

    After fixing them, I get an exception related to Dagger:

    e: [kapt] An exception occurred: java.util.NoSuchElementException
    	at com.sun.tools.javac.util.List$2.next(List.java:432)
    	at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:302)
    	at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:254)
    	at dagger.android.processor.AndroidMapKeys.mapKeyValue(AndroidMapKeys.java:75)
    	at dagger.android.processor.AndroidMapKeys.lambda$annotationsAndFrameworkTypes$5(AndroidMapKeys.java:56)
    	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1321)
    

    So I really don't want to downgrade my Android Gradle plugin. Also, we've only noticed the error after making our app support 64-bit architecture, so it makes more sense the error is related with architecture rather the Android Gradle plugin.

    The error mostly occurs on Oppo and Android 5.1.1:

    Screen Shot 2019-08-14 at 7 29 12 PM

    Any idea how this could be solved?

    stale 
    opened by waseefakhtar 29
  • Error inflating class com.facebook.drawee.view.SimpleDraweeView

    Error inflating class com.facebook.drawee.view.SimpleDraweeView

    Hi. I've tried to inflate this guy on adapter, but don't work! I'm using the last version.

    <com.facebook.drawee.view.SimpleDraweeView
      android:id="@+id/camera_image"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:placeholderImage="@mipmap/ic_launcher"/>
    

    android.view.InflateException: Binary XML file line #7: Error inflating class com.facebook.drawee.view.SimpleDraweeView...

    opened by ppamorim 29
  • add attr placeholderImageUri

    add attr placeholderImageUri

    add attr placeholderImageUri and demo

    can write image uri directly like this

        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/placeholderImageUri"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            fresco:actualImageScaleType="fitCenter"
            fresco:placeholderImageUri="http://www.smemo.info/icon.png" />
    

    when we use android databinding ,like this

        <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/placeholderImageUri"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            fresco:actualImageScaleType="fitCenter"
            fresco:placeholderImageUri="@{imageBean.imageUrl}" />
    
    CLA Signed GH Review: accepted 
    opened by szpnygo 28
  • Mac os How to build?

    Mac os How to build?

    :imagepipeline:ndk_build_gifimage FAILED

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':imagepipeline:ndk_build_gifimage'.

      A problem occurred starting process 'command 'ndk-build''

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED

    Total time: 11.279 secs kongnandembp:fresco kongnan$ echo $PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/Users/kongnan/Documents/AndroidSDK/android-ndk-r10d kongnandembp:fresco kongnan$ ndk-build Android NDK: Could not find application project directory !
    Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
    /Users/kongnan/Documents/AndroidSDK/android-ndk-r10d/build/core/build-local.mk:148: *** Android NDK: Aborting . Stop. kongnandembp:fresco kongnan$

    opened by kongnanlive 27
  • First frame of animated GIF as placeholder image?

    First frame of animated GIF as placeholder image?

    Is there a way to use the first frame of an animated GIF as the placeholder image for a view? This would ease the visual transition when loading (and reloading) animated GIFs.

    If not, I would love to see this added as a feature!

    enhancement help wanted 
    opened by ewills 26
  • The application may be doing too much work on its main thread.

    The application may be doing too much work on its main thread.

    I used SimpleDraweeView in adapter, but my app runs slowly, and I saw the log below:

    I/Choreographer(1378): Skipped 55 frames! The application may be doing too much work on its main thread.

    so I comment the code mSimpleDraw.setImageUri, the app runs fluently. I think the SimpleDraw blocks the main thread when fetching image from network.

    bug 
    opened by ultimaters 25
  • Process 'command 'ndk-build.cmd'' finished with non-zero exit value 2

    Process 'command 'ndk-build.cmd'' finished with non-zero exit value 2

    hi, i replace commandLine ndk-build imagepipeline.gradle to ndk-build.cmd and encoutered blow problem build-local.mk :imagepipeline:ndk_build_gifimage FAILED Error:Execution failed for task ':imagepipeline:ndk_build_gifimage'.

    Process 'command 'ndk-build.cmd'' finished with non-zero exit value 2

    duplicate 
    opened by BaronZ 24
  • Cancelled postprocessed images aren't cached

    Cancelled postprocessed images aren't cached

    Hi guys,

    First of all, great library! Only problem I've had so far is with caching of post processed images - I'm following the documentation put up, and have looked around, but can't seem to figure out what's going wrong here.

    I have a FragmentStatePagerAdapter, with each fragment having a full-sized, blurred image as its background, and I have a post-processor that blurs the background image, and all of that is working fine. But when I scroll between the fragments back and forth, the blurred background image is reprocessed every time, which is really annoying. There's a section in the docs saying that post-processed images can be cached, and I'm doing everything it's saying I should, but images are still not being caches.

    My post-processor:

    public class BlurPostprocessor extends BasePostprocessor {
            private Context context;
            private String url;
    
            public BlurPostprocessor(Context context, String url) {
                this.context = context;
                this.url = url;
            }
    
            @Override
            public String getName() {
                return "blurPostProcessor";
            }
    
            @Override
            public CacheKey getPostprocessorCacheKey() {
                return new SimpleCacheKey(url);
            }
    
            @Override
            public void process(Bitmap destBitmap, Bitmap sourceBitmap) {
                    // code that blurs the image into destBitmap
            }
        }
    

    I've also tried implementing my own CacheKey before finding out about SimpleCacheKey, but that didn't work either. Any help would be appreciated!

    Thanks!

    bug 
    opened by botondbutuza 23
  • SimpleDraweeSpanTextView can not show image

    SimpleDraweeSpanTextView can not show image

    when i use SimpleDraweeSpanTextView and textIsSelectable = true arrts , SimpleDraweeSpanTextView is not work.it can not show image。

    fresco version v2.6.0 Android version 29

    opened by didixyy 0
  • Large GIF performance issues

    Large GIF performance issues

    Description

    Loading a 1080p GIF with roughly 200 frames causes most devices to throw ANRs.

    Reproduction

    Any high res GIF seems to cause issues, but when the resolution is combined with a large number of frames the issue seems to be compounded. https://wallpapersafari.com/download/QslraR/ - is one example.

    Additional Information

    • Fresco version: 2.6.0
    • Platform version: Not specific to platform version
    opened by EverydayPineapple 0
  • JPEG XL (image/jxl) suppport (feature request)

    JPEG XL (image/jxl) suppport (feature request)

    This image format has many benefits, see e.g. https://jpegxl.info/why-jxl.html

    The reference implementation libjxl (https://github.com/libjxl/libjxl) is well-optimized for ARM and production-ready, and the binary size footprint of a decoder-only libjxl-dec build for Android is only in the order of 200kb or so.

    opened by jonsneyers 0
  • APP_STL set to 'c++_shared' may be better on the size of so

    APP_STL set to 'c++_shared' may be better on the size of so

    Description

    I found that libgifimage.so、libnative-imagetranscoder.so and libstatic-webp.so are all using APP_STL := c++_static in Application.mk.

    I’m using fresco in a big project and that will increse the size of so and risk of runtime exception.

    I would like to know if you can provide a c++_shared version of sdk to users?

    https://developer.android.google.cn/ndk/guides/cpp-support?hl=zh-cn#c_runtime_libraries

    opened by shakingheadjesus 0
  • Didn't find class

    Didn't find class "com.facebook.imagepipeline.debug.FlipperImageTracker"

    --- Please use this template, and delete everything above this line before submitting your issue ---

    Description

    React-Native app crash is happening while app is in run time. Here is the log from Android Studio,

    2022-11-09 10:55:50.497 8798-8924/<packagename> E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
        Process: <packagename>, PID: 8798
        java.lang.NoClassDefFoundError: Failed resolution of: Lcom/facebook/imagepipeline/debug/FlipperImageTracker;
            at com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin.<init>(FrescoFlipperPlugin.java:113)
            at <packagename>.ReactNativeFlipper$2$1.run(ReactNativeFlipper.java:62)
            at android.os.Handler.handleCallback(Handler.java:978)
            at android.os.Handler.dispatchMessage(Handler.java:104)
            at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
            at android.os.Looper.loopOnce(Looper.java:238)
            at android.os.Looper.loop(Looper.java:357)
            at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
            at java.lang.Thread.run(Thread.java:1012)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.imagepipeline.debug.FlipperImageTracker" on path: DexPathList[[zip file "/data/app/~~wHGnpzND6d8FdPD7k_mang==/<packagename>-kUqfbrWNs5hKMm5LpIt-kw==/base.apk"],nativeLibraryDirectories=[/data/app/~~wHGnpzND6d8FdPD7k_mang==/<packagename>-kUqfbrWNs5hKMm5LpIt-kw==/lib/arm64, /data/app/~~wHGnpzND6d8FdPD7k_mang==/<packagename>-kUqfbrWNs5hKMm5LpIt-kw==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin.<init>(FrescoFlipperPlugin.java:113) 
            at <packagename>.ReactNativeFlipper$2$1.run(ReactNativeFlipper.java:62) 
            at android.os.Handler.handleCallback(Handler.java:978) 
            at android.os.Handler.dispatchMessage(Handler.java:104) 
            at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27) 
            at android.os.Looper.loopOnce(Looper.java:238) 
            at android.os.Looper.loop(Looper.java:357) 
            at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226) 
            at java.lang.Thread.run(Thread.java:1012) 
    

    Reproduction

    I am unable to provide reproducible demo except above mentioned log from Android Studio

    Solution

    I am not sure about it.

    Additional Information

    • Fresco version:

      This is what I found from android/app/buidl.gradle:

    implementation('com.facebook.fresco:fresco:2.1.0') {
            exclude group: 'com.facebook.soloader', module: 'soloader'
            exclude group: 'com.facebook.fresco', module: 'soloader'
    }
    
    • Platform version:
    Android Studio: Android Studio Dolphin | 2021.3.1 Patch 1
    Android Version: 11
    Device: Moto Edge 20 Fusion
    React Native: "0.62.2"
    
    opened by Yandamuri 0
Releases(v2.6.0)
  • v2.5.0(Jun 7, 2021)

  • v2.3.0(Jul 20, 2020)

    Highlights

    • Bumped Fresco's minSdk to 14. We did not remove any Gingerbread-specific code yet, but will do so soon. 091e8b7c4cd11a6cc5b535dd84d8e21a1e243ac0

    • Proper nullability annotations for some classes by using new Infer annotations - this improves Kotlin support and null-safety.

    • Improved Java-only Fresco setup. 4a9961559c8240cbb88eeecf2303f956d0185120

    • Lots of debug logging improvements: More reliable image origin, new MEMORY_BITMAP_SHORTCUT origin, more debug information available. These are available via ImagePerfData#getExtraData()

    • Added experimental option to recover from OOMs: f43d5990600c9ac6c3a18e14e4d3c260cf78b462

    • Added option to force a single image pipeline instance: 5f5c076fe26b17a849498c27c7541550c3ef3984

    • Disk cache support for the Fresco Flipper images plugin.

    • Bumped SoLoader version to 0.9.0.

    • Use buildSrc for Fresco's internal dependency management.

    • WIP: Lots of improvements for our new Fresco Vito UI components.

    Pull requests:

    • Fixed resource leak problem while using BlurPostProcessor. Thanks @FrancescoJo for the PR.
    • Make sure there is at least one overlay in GenericDraweeHierarchy. Thanks @dengweichao for the PR.
    • Removed unused padding value. Thanks @erenulas for the PR.

    Cleanup

    • Removed Drawee-Volley module. If you're using Drawee-Volley, you can still continue using it by just copying the files removed with 7c2517edee7d4080fab0daf54fd4ac4eca6a8497 into your project. We did not significantly change these in a long time, so this has been stable.
    • Removed OkHttp2 image pipeline artifact. See deba7d1c3c218377a5b67e58f269914d8f8a88be

    Full changelog: https://github.com/facebook/fresco/compare/v2.2.0...v2.3.0

    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Apr 16, 2020)

    Fixes and Improvements

    • Add reportData methods for debugging and crash reporting
    • Add support for work instrumentation
    • Fix animatable drawables not playing
    • Improve debug overlay
    • Show Encoded Cache in Flipper Image plugin
    • Add option to disable/override encoded cache
    • Migrate many deps to use buildSrc

    Thanks

    Thanks to the following for their pull requests which are included in this release: @iadeelzafar, @xinghui, @JLLeitschuh, @jkcailteux

    The full changelog is here.

    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Jan 21, 2020)

    Fresco 2.1.0 comes with tons of improvements, including a Java-only Fresco version.

    Highlights

    • A Java-only Fresco version. See below for Gradle setup. Note: If you display animated GIFs, you can use animated-gif-lite instead of animated-gif for Java-only GIF support.
    • SoLoader is now optional again. We've worked on a new NativeLoader interface to load native code on Android. Now, with Fresco 2.1.0 all the changes are available for people to use, see below for the Gradle setup. If you want to employ a custom native loading mechanism, just implement a NativeLoaderDelegate and call NativeLoader.init(yourDelegate) before Fresco is initialized.
    • New ProducerListener2 and RequestListener2. They give you significantly more flexibility since they allow you to access more image information.
    • The possibility to pass down the UI component ID (e.g. Drawee ID / Vito ID) through the whole image pipeline, which, in combination with listeners above, can for example be used for debugging or logging.
    • A new memory type for encoded images and byte buffers: Ashmem. Now you can either use Java memory, native memory or Ashmem.
    • Faster circular native rounding.
    • Improved concurrency handling for deferred releasing - and much more.
    • You can look at the full changelog here.

    Java-Fresco Gradle setup:

    implementation('com.facebook.fresco:fresco:2.1.0') {
        exclude group: 'com.facebook.soloader', module: 'soloader'
        exclude group: 'com.facebook.fresco', module: 'soloader'
        exclude group: 'com.facebook.fresco', module: 'nativeimagefilters'
        exclude group: 'com.facebook.fresco', module: 'nativeimagetranscoder'
        exclude group: 'com.facebook.fresco', module: 'memory-type-native'
        exclude group: 'com.facebook.fresco', module: 'imagepipeline-native'
    }
    

    Custom SoLoader Gradle setup:

    implementation('com.facebook.fresco:fresco:2.1.0') {     
          exclude group: 'com.facebook.soloader', module: 'soloader'
          exclude group: 'com.facebook.fresco', module: 'soloader'    
     }
    
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Jul 3, 2019)

    Breaking Dependency Change

    We bumped the major version since Fresco is now using AndroidX support libraries. If you are still using the previous support library, please use version 1.13.0 until you've migrated to AndroidX.

    New Flipper Images Plugin

    We've open sourced our Flipper images plugin, which makes it easy for you to debug images within your application. Take a look at the Flipper documentation here: https://fbflipper.com/docs/features/images-plugin.html It also allows you to track unclosed CloseableReferences if you're using the image pipeline directly.

    Fixes and Improvements

    Highlights:

    • Added explicit color management (51efaa75f410a390566f72596099c35d85a42216). See #2323 for more information.
    • Added API to get the size of the disk cache.
    • Fix scaling up image with RoundingParams.
    • Prevent Fresco from crashing for certain invalid GIFs.
    • Added local content URI support for fetching encoded images.
    • Added CloseableReference leak tracking. You can hook up your own listener to track unclosed references.
    • Video thumbnails: generate video thumbnail from content provider when we cannot get file path.
    • Updated the Showcase sample app to enable the Flipper images plugin and started using Kotlin.
    • Display Image URI in Fresco's debug overlay.
    • Improved image origin listener accuracy.
    • Added caller context verification to the ImagePipeline. You can now check whether proper image attribution (caller context) is set.

    Full changelog: https://github.com/facebook/fresco/compare/v1.13.0...v2.0.0

    Thanks

    Thanks to the following for their pull requests which are included in this release: @otopba, @lpy and @kexuejin

    Source code(tar.gz)
    Source code(zip)
  • v1.14.2(Jun 22, 2019)

    • Added leak tracking for CloseableRefererences. You can hook up your custom leak handler for unclosed CloseableReferences which is triggered when a reference is GCed without being explicitly closed.
    • You can also use the new Flipper images plugin (https://github.com/facebook/flipper) to track these leaks.
    Source code(tar.gz)
    Source code(zip)
  • v1.13.0(Mar 1, 2019)

  • v1.12.1(Feb 6, 2019)

    This is a hotfix release including changes below

    • Optionally downsample gif frames to drawable dimensions 7479a6f
    • Expose hasCachedImage for ImagePipeline 90f7aa6
    Source code(tar.gz)
    Source code(zip)
  • v1.12.0(Feb 4, 2019)

    Fixes and Improvements

    • SoLoader updated to v0.6.0 with support for App Bundles 6fc071d
    • New native image transcoder module (native-imagetranscoder) a6b47b9
    • Added new "critically low" foreground memory trim level 9745eb8
    • Expose ID generation and submitFetchRequest 7d67c7f
    • New function in BitmapUtil to get the dimensions of an image from its Uri 1205892
    • Added option to show all FadeDrawable layers per default a340566
    • Register LruBitmapPool as memory trimmable 839b5a1
    • Added GifAnimationBackend that improves the GIF Lite variant 027f95d
    • Add option to control prefetching to bitmap cache per request 6ca0fa9
    • Add image request option to override default network images resizing d503601
    • okhttp updated to 3.12.1 0866e81

    Thanks

    Thanks to @dulmandakh for your pull request!

    Source code(tar.gz)
    Source code(zip)
  • v1.11.0(Oct 16, 2018)

    Fixes and Improvements

    • Moved native image filters into a separate gradle module (native-filters)
    • Fix for OkHttp disk caching (allows you to disable Fresco disk cache and use OkHttp)
    • Made most native code optional (jpeg transcoder and native memory chunks)
    • Proper support for GIFs when using a RetainingDataSource
    • Fix to disable caching for unknown image types
    • Fix bug when using DownSample and RegionDecoder together
    • Fixed image origin in debug overlay
    • Color space support
    • Improved HEIF support (on devices which supports decoding them)
    • Fixes for Android Studio layout preview
    • Improved blurring and rounding with antialiasing (see showcase app)
    • Add support for windows ICO image format
    • libjpeg update to 1.5.3
    • libwebp updated to 1.0.0
    • libpng updated to 1.6.35

    Thanks

    Thanks to the following for their pull requests which are included in this release: @Crysis21, @JuniperPhoton, @dryganets, @Yrlec, @s1rius, @qhyuan1992, @xjy2061, @zjupure

    Source code(tar.gz)
    Source code(zip)
  • v1.10.0(Jul 23, 2018)

    Release Notes v1.10.0

    Breaking

    • Remove media variations
    • Pass DraweeController down to data source generation: a7796dea693cb63f9e0933236335e8a68f24157a

    Fixes and Improvements

    • Updated Comparison app
    • Do not cache images if they are of unknown format 7a874c17bda54a92755d36bce6278599cc0cecc1
    • Fix webp add round draw out of bound (#2132) (thanks wangfang) 5357424115b6e3ef9966d141efb66cd72bb5f0e9
    • Fix GIF images scaling with FIT_XY scale type 6898a9c39a6ef930fe84c5208daaa08f2a22432d
    • Get rid of internal android Predicate (Prepare for Android P) API 0a93ffc58585a1f7104ea7a5e0b93b6c1b16cdcc
    • Control memory cache per request d2474bcd7889dd1e2150aef4a861e3393d6d3dc5
    • Add configuration option for bitmap count limit 3ccf021877571cc66c1cf28ecc82788f83579ad3
    • Handle multiple copies of Fresco 54556c910130a0ea5aa30f547adb1cec826456f5
    • Interstitial shows on profile in MediaGallery (thanks Young Kim) d560881e6d2228e90ddd0d1cf62f269b8c4d7fd0
    • Mark object passed in .equals() as nullable (thanks Christopher Frazier) e1145cfce57bb1b31dbd88d59a353a484a91cc808ef0
    • Many updates for perf logging
    • Update SoLoader to 0.5.0 8e9243e94fc9f8117b09b1fb6c4594feda7411c8
    • Added RoundedNinepatchDrawable e1aa81f797583c244817fc334395a13d0e33b3bc
    • Extend Fresco's ImageFormats to detect HEIF images 84ace378a3c994b0e8d4bf0112bdede6b1af397c

    Thanks

    Thanks to the following for their pull requests which are included in this release: @cucbin, @chibatching, @mariotaku, @hetovar, @Naman-Bhalla, @woyunowuyuda, @hearsilent

    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Apr 11, 2018)

    Updated to MIT license

    Breaking Changes

    • Inlined ProGuard rules such that you no longer need to manually copy-over the Fresco proguard file (thanks @gengjiawen). If you are manually adding Fresco-specific ProGuard files in your Gradle files, you can now remove them

    • Added isSameImageRequest() to DraweeController

    New APIs

    • Added API to pass an ImageRequest to SimpleDraweeView(53c6151d1e5fd4ceb4733c8eecec86b2f4214632 (https://github.com/facebook/fresco/commit/53c6151d1e5fd4ceb4733c8eecec86b2f4214632), thanks @bkpavan)
    • Added configurable timeout for HttpUrlConnection network fetcher (005f38a797f2ad9ed4d138df45f44835144c32fd, thanks @jnawaz)

    Improvements and bugfixes

    • Added image load time to debug overlay
    • Updated libwebp to 0.6.1 (thanks @eldk)
    • Updated OkHttp to 3.10.0 (thanks @NightlyNexus)
    • Updated GifLib to 5.1.4
    • Fixed GIF rendering for missing color maps
    • Fixed WebP native memory leak (thanks @howardpang)
    • Improved equality handling for controllers and ImageRequests
    • Made bitmap decoding more robust
    • Various other improvements & sample app updates

    Thanks

    Thanks to the following for their pull requests which are included in this release: @bkpavan, @eldk, @gengjiawen, @howardpang, @jnawaz, @NightlyNexus, @sophiebits!

    Source code(tar.gz)
    Source code(zip)
  • v1.8.1(Feb 8, 2018)

    Version 1.8.1 is a bug-fix release following the main 1.8.0 release. In particular, it addresses the following issues:

    • Fresco's SoLoader configuration no longer crashes with certain pro-guard configurations (issue: #2039)
    • In previous versions WebP image might fail to load in certain configurations (commit: https://github.com/facebook/fresco/commit/06fe3719a3a3c659438b6c25a8008945e67156a0)
    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Jan 19, 2018)

    Version 1.8.0 contains several improvements and bug fixes, including:

    • Fixed animated image rendering for dynamic frame dimensions (086fd1df)
    • Fixed downsampling for PNGs (e2c464ef)
    • Fixed WebPs with alpha decoding on API <= 17 devices (705b7745)
    • Supporting wide color gamut decoding on Android 8+ (4a64df00)
    • Fixed handling pin bitmap errors (a08f9e76, f5eb85eb)

    Breaking changes

    Switched to using SoLoader (aef3790d)

    SoLoader has been released for a while now, and updated just last week. We've made the decision to add a hard dependency on it and make SoLoader the one and only native code loader that we use in Fresco. API-wise, this means SoLoaderShim is gone. If you were using some other native loading library (e.g. ReLinker), you can either:

    • keep both and just delete your SoLoaderShim implementation, but this will make your APK size bigger
    • switch to SoLoader for the rest of your app as well and remove the other dependency

    Thanks

    Thanks to the following for their pull requests which are included in this release: @Alonexx, @8enet, @zjupure, @bschnack

    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Dec 19, 2017)

  • v1.7.0(Dec 18, 2017)

    Do Not Use: this release is broken (see #1991)

    Version 1.7.0 contains several improvements and bug fixes, including:

    • Switched to OkHttp 3.8.0 (bd9dd827)
    • Region decoding (bd249fa4)
    • Native circular rounding (705379ee)
    • Added RetainingDataSourceSupplier (ff3bed97)
    • Support inverted rotation orientations (d25944a)

    Thanks

    Many thanks to the following people who sent pull requests that are included with this release!

    • @adamc01
    • @Anandsoni14
    • @a-d-collins
    • @rvndbalaji
    • @efrohnhoefer
    • @Kazemir
    • @w0yne
    • @eldk
    • @simonzhexu
    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Aug 10, 2017)

    Version 1.5.0 contains several improvements and bug fixes, including:

    • Better control of bitmap GPU uploads
    • Add support for fitBottomStart scaleType
    • Support for local content video URI thumbnails
    • Bug fixes

    Sample Apps

    The following improvements were made to the Fresco Showcase app:

    • Added image resizing example
    • Support loading of SVG files not starting with "<svg" (in the Showcase SVG decoder example)

    Breaking changes

    • MediaIdExtractor was removed

    Thanks

    Thanks to the following for their pull requests which are included in this release: @a-d-collins, @JuniperPhoton, @DkBai, @IguteChung

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Jul 17, 2017)

    Animated Image Changes

    Rewritten implementation for animated images (GIFs and animated WebPs) with better performance, particularly when showing multiple GIFs.

    This brings improved frame caching and memory management, better control for users of Fresco, new features and some GIF rendering issues have been fixed.

    Other Updates in 1.4.0

    • Support for Bitmap.prepareToDraw to upload bitmaps to the GPU ahead of time (as suggested by @ ChrisCraik) - enabled via ImagePipelineExperiments
    • Fixed Shared Element Transitions. You have to manually call draweeView.setLegacyVisibilityHandlingEnabled(true)
    • Per-image custom drawable factory support
    • Caching improvements
      • You can now set a custom cache trim strategy for the image pipeline
      • Added BaseCacheEventListener that implements CacheEventListener for convenience
    • Easier synchronous requests with DataSources#waitForFinalResult
    • Fixed IncreasingQualityDataSource to keep the low res image if the high res request fails
    • Various other bug fixes and improvements: BitmapCounterProvider, Media Variations, Progressive JPEGs, EXIF parsing, ZoomableDraweeView touch logic, DraweeView attributes in Android Studio

    Breaking Changes

    AnimatedDrawable

    The old animation code has been removed, including AbstractAnimatedDrawable, AnimatedDrawable, or AnimatedDrawableSupport . Change your casts to AnimatedDrawable2. We also removed com.facebook.fresco:animated-base-support since it is no longer needed.

    DrawableFactory

    Moved DrawableFactory to com.facebook.imagepipeline.drawable.DrawableFactory. Please change your imports if you're using custom drawable factories.

    Small cache threshold

    Removed this option from ImagePipelineExperiments as well as related code.

    Internal changes

    Added void onNewResult(T newResult, @Status int status) to Consumer interface.

    Removed deprecated methods

    • ImagePipeline#getDataSourceSupplier(ImageRequest, Object, boolean)
    • EncodedImage#setEncodedCacheKey(CacheKey)
    • EncodedImage#getEncodedCacheKey()
    • GenericDraweeHierarchyBuilder#setActualImageMatrix()
    • GenericDraweeHierarchyBuilder#getActualImageMatrix()

    Sample Apps (now with Kotlin!)

    We've updated our Showcase sample app to include more samples and merged other sample apps into it.

    There is also a new Kotlin sample app that shows how to use Fresco with Kotlin.

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Apr 20, 2017)

    Version 1.3.0 is mainly a bugfix release.

    • Showcase application improved and new examples added
    • New onUltimateProducerReached() callback method added to ProducerListener.
    • It's now possible to load resources using a qualifying resource URI. This allows for loading resources that are not part of the application's main package.

    Breaking Changes

    PooledByteBuffer and PooledByteBufferInputStream

    These two classes have moved package from com.facebook.imagepipeline.memory to com.facebook.imagepipeline.memory. If you directly make use of either class, simply update your imports.

    ProducerListener

    The ProducerListener interface has a new callback: onUltimateProducerReached(). This identifies the producer which was ultimately responsible for producing the result which was passed back, so can give an idea about how many requests are satisfied from caches.

    If you have an implementation of ProducerListener or RequestListener you will need to add an implementation of this method.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @voiddog, @nesterov-n, @paour and @josephlam1984.

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Mar 22, 2017)

    Version 1.2.0 is mainly a bugfix release.

    • A MediaIdExtractor interface has been added to benefit from media variations without explicitly adding media IDs to every image request. This is currently experimental though and not recommended unless you're careful and confident in the URLs your app uses.
    • Added option to ImageRequestBuilder for setting a custom image decoder for that particular request.
    • libfb_jpegturbo is now linked as a shared library.
    • Updated to OkHttp v3.6.0.
    • Updated libpng to v1.6.26.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @paour, @desmond1121, @caojianfeng, @FtheGFW, @eldk, @lucas34, @angarron

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Feb 14, 2017)

    Version 1.1.0 is mainly a bugfix release.

    There is one breaking change: MemoryUiTrimmable was removed. See d41bf01 for details.

    All commits going into this release: https://github.com/facebook/fresco/compare/v1.0.1...v1.1.0

    Thanks

    Thanks to the following for their pull requests which are included in this release: @lucas34

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Jan 19, 2017)

    Version 1.0.1 is mainly a bugfix release:

    • Fixed an issue where URIs with spaces could not be parsed correctly.
    • Updated libwebp to 0.5.2 and fixed some WebP issues.
    • Downsampling ratio calculations are now correct.
    • The image pipeline now uses the correct producer sequence for local files.
    • SimpleDraweeSpanTextView now resizes itself correctly.

    New Features

    You can use UriUtil.getUriForFile(File) and ImageRequest.fromFile(File) to create URIs and ImageRequests for files.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @angarron, @korDen, @sachins, @pizza, @JoelMarcey

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Dec 15, 2016)

    The version bump was overdue - the library is stable for a long time. It is used in all the major Facebook apps for years (Facebook, Messenger, Moments, Facebook Lite). On top of that it also powers a lot of non Facebook apps like Twitter, Wikipedia and Vimeo. We were careful with breaking changes for at least a year - so here we go: Version 1.0!

    With this release, Fresco allows you to easily add support for more image formats and custom decoders. This is configurable using the ImageDecoderConfig class. See our sample application for a practical example.

    Fresco now allows you to provide it with more semantic information about different versions and URIs of the same image. The concept is called Media Variations and it uses a media id to group different URIs that refer to the same underlying source image that might be loaded in different sizes. Fresco will try to satisfy a new request by first looking if another already cached image with the same media id exists and displaying that. See our sample application for a practical example.

    We added a Debug overlay for drawees. They can show you how large the underlying image is with respect to the actually drawn screen area. This is helpful in order to screen you app for images that should be loaded at a smaller resolution. You can activate it using the DraweeConfig parameter of Fresco.initialize(...).

    If you are manually dealing with CloseableReferences you might find yourself leaking memory. One can now specify UnclosedReferenceListener in order to log these leaks or crash in debug builds.

    DraweeSpan and BetterImageSpan are new Spannable implementations for displaying Drawees within text.

    Breaking Change

    Fresco now longer has a direct dependency on the Android Support library. Instead, it expects certain part of the support library to be provided by the including application. If you do not include the Android Support Library yourself already, you will have to add the following line to your build.gradle file:

    compile "com.android.support:support-core-utils:24.2.1"
    

    With this version we have also removed methods and classes that have been marked as @Deprecated for some time. For all those cases there are new APIs that are easy to use.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @PiotrWpl, @rigdern, @nesterov-n, @sdqhzhm, @kukuhyoniatmoko, @ghassett, @sailaway

    Source code(tar.gz)
    Source code(zip)
  • v0.14.1(Sep 30, 2016)

  • v0.14.0(Sep 23, 2016)

    • PlatformBitmapFactory now supports more createBitmap variations
    • Support for custom Drawable factories
    • New DefaultConfig allows to set global defaults for ImageRequests
    • RotationOptions allow for better control of rotation (either manual or based on EXIF information)
    • We've updated the target, build tools and support library to 24.2.1 which now requires Java 8
    • Improved sample applications
    • And a variety of other fixes and improvements

    Breaking Changes

    In support library 24.2 Google split the library into smaller parts. By upgrading our support library dependency to 24.2.1, we've been able to specify the parts which Fresco needs (which is very little).

    We recommend both upgrading your support library dependencies similarly and making sure you explicitly depend on the parts of the support library that you need. This can reduce your APK size.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @eldk, @s1rius, @gtpark, @kunny

    Source code(tar.gz)
    Source code(zip)
    frescolib-v0.14.0-multi.zip(6.91 MB)
    frescolib-v0.14.0.zip(6.88 MB)
  • v0.13.0(Aug 19, 2016)

    • Libjpg-turbo upgraded to version 1.5.0
    • Animation Info exposed
    • NineOldAndroid dependency removed from ImagePipeline module
    • Improved sample applications
    • And a variety of other fixes and improvements

    Breaking Changes

    • Unused flags removed from ImageDecodeOptions.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @lambdapioneer, @ahmedre, @joonho and @KoMinkyu.

    Source code(tar.gz)
    Source code(zip)
    frescolib-v0.13.0-multi.zip(16.60 MB)
    frescolib-v0.13.0.zip(16.57 MB)
  • v0.12.0(Jul 22, 2016)

    • Fixed ProGuard issues with animated-* and okhttp3 modules
    • Disk cache memory index is now persisted across sessions
    • Removed unnecessary dependencies on nineoldanroids
    • Fixed behavior of zoomables
    • Improved sample applications
    • And a variety of other fixes and improvements

    Breaking Changes

    • ImageType has been renamed to CacheChoice

    Thanks

    Thanks to the following for their pull requests which are included in this release: @huangjunkun, @PiotrWpl, @s1rius and @0mok

    Source code(tar.gz)
    Source code(zip)
    frescolib-v0.12.0-multi.zip(16.80 MB)
    frescolib-v0.12.0.zip(16.78 MB)
  • v0.11.0(Jun 14, 2016)

    • Image pipeline
      • Split out ImagePipelineExperiments from ImagePipelineConfig
      • Volley is now integrated as a backend for the image pipeline as an alternative to OkHttp or HttpUrlConnection
      • Resumed requests occur in their original order
      • Fixed a bug where the OkHttp backend could leak non-successful responses
    • Cache
      • Added details of each event to CacheEventListener methods
      • Added caller context as a parameter for CacheKeyFactory methods
      • Added support for synchronous disk cache checks
    • Drawee
      • Added support for the hotspot so ripple drawables work as expected in Lollipop and up.
      • GenericDraweeHierarchy now has setter methods supporting resource IDs
      • Fixed drawee scale type transitions when using activity transitions
      • Added support for dynamically changing backgrounds and overlays
    • Samples
      • Improved gesture handling in the zoomable sample code
      • Added a new sample app to test scroll performance
    • Also
      • Changed Bolts dependency to the smaller Tasks module
      • And a variety of other fixes and improvements

    Breaking changes

    Experimental config options

    To make it clearer which options in ImagePipelineConfig are included for experimental purposes, these have been moved into a separate ImagePipelineExperiments class. Options here should be expected to be volatile and liable to be changed or removed in future releases. Changing these values from their defaults is not recommended in most cases.

    These methods are still available in a chain while building your config so if you had the following before:

    ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
        .setForceSmallCacheThresholdBytes(maxSmallImageBytes)
    

    you can fix it by changing it as follows:

    ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context)
        .experiment().setForceSmallCacheThresholdBytes(maxSmallImageBytes)
    

    CacheEventListener

    All CacheEventListener methods now receive a new CacheEvent object.

    If you have a custom implementation you will need to add the extra parameter to each method. In the case of onEviction() the old parameters have been replaced so you will also need to extract the values from the event if you are making use of them.

    CacheKeyFactory

    All CacheKeyFactory methods now receive an extra parameter with the caller context object that can be specified when the image is requested.

    If you have a custom implementation you will simply need to add the extra parameter to each method.

    Multiple drawee backgrounds

    It was previously possible to specify multiple backgrounds in a drawee hierarchy. This is still possible but deprecated and if you specify multiple backgrounds these can no longer be rounded.

    Thanks

    Thanks to the following for their pull requests which are included in this release: @chethann, @droidekas, @sagartrehan, @froxCZ, @nborodikhin, @Ribesg, @dmitrychistyakov, @plamenko, @szpnygo, @s1rius and @Rexee.

    Source code(tar.gz)
    Source code(zip)
    frescolib-v0.11.0-multi.zip(16.80 MB)
    frescolib-v0.11.0.zip(16.77 MB)
Owner
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
Facebook
Powerful and flexible library for loading, caching and displaying images on Android.

Universal Image Loader The great ancestor of modern image-loading libraries :) UIL aims to provide a powerful, flexible and highly customizable instru

Sergey Tarasevich 16.8k Jan 8, 2023
🍂 Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

?? Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

Jaewoong Eum 1.4k Jan 2, 2023
Andorid library that loads images asynchronously into cache using a thread pool

AndroidImageLoader AndroidImageLoader is a fork of the Image Loader component in libs-for-android. The AndroidImageLoader is an Android library that h

David Wu 63 Feb 19, 2019
Android ImageView that handles animated GIF images

GifImageView Android ImageView that handles Animated GIF images Usage In your build.gradle file: dependencies { compile 'com.felipecsl:gifimageview:

Felipe Lima 1.1k Dec 27, 2022
An Android view for displaying repeated continuous side scrolling images. This can be used to create a parallax animation effect.

Scrolling Image View An Android view for displaying repeated continuous side scrolling images. This can be used to create a parallax animation effect.

Q42 1.8k Dec 27, 2022
Media Picker is an Android Libary that lets you to select multiple images or video

Media Picker Please let me know if your application go to production via this link Media Picker is an Android Libary that lets you to select multiple

Abdullah Alhazmy 264 Nov 10, 2022
Load images using Glide

Glide_Demo Load images using Glide Image used private val image = "https://cdn.pixabay.com/photo/2018/05/03/21/49/android-3372580_1280.png" Add Glide

Daniel Kago K 0 Nov 1, 2021
Splash - Wanted an app that displays images from Unsplash, well here it is

Splash - Wanted an app that displays images from Unsplash, well here it is

Bamidele Ajewole 2 Apr 26, 2022
Easy to use, lightweight custom image view with rounded corners.

RoundedImageView Easy to use, lightweight custom image view with rounded corners. Explore the docs » View Demo · Report Bug · Request Feature About Th

Melik Mehmet Özyildirim 6 Dec 23, 2021
An image loading and caching library for Android focused on smooth scrolling

Glide | View Glide's documentation | 简体中文文档 | Report an issue with Glide Glide is a fast and efficient open source media management and image loading

Bump Technologies 33.2k Jan 7, 2023
A powerful image downloading and caching library for Android

Picasso A powerful image downloading and caching library for Android For more information please see the website Download Download the latest AAR from

Square 18.4k Jan 6, 2023
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 Jan 2, 2023
An Android transformation library providing a variety of image transformations for Glide.

Glide Transformations An Android transformation library providing a variety of image transformations for Glide. Please feel free to use this. Are you

Daichi Furiya 9.7k Dec 30, 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 Jan 9, 2023
An Android transformation library providing a variety of image transformations for Picasso

Picasso Transformations An Android transformation library providing a variety of image transformations for Picasso. Please feel free to use this. Are

Daichi Furiya 1.7k Jan 5, 2023
Library to handle asynchronous image loading on Android.

WebImageLoader WebImageLoader is a library designed to take to hassle out of handling images on the web. It has the following features: Images are dow

Alexander Blom 102 Dec 22, 2022
Compose Image library for Kotlin Multiplatform.

Compose ImageLoader Compose Image library for Kotlin Multiplatform. Setup Add the dependency in your common module's commonMain sourceSet kotlin {

Seiko 45 Dec 29, 2022
Android Asynchronous Networking and Image Loading

Android Asynchronous Networking and Image Loading Download Maven Git Features Kotlin coroutine/suspend support Asynchronously download: Images into Im

Koushik Dutta 6.3k Dec 27, 2022
A fast ImageView that supports rounded corners, ovals, and circles.

RoundedImageView A fast ImageView (and Drawable) that supports rounded corners (and ovals or circles) based on the original example from Romain Guy. I

Vince Mi 6.4k Jan 8, 2023