SVG rendering library for Android

Overview

AndroidSVG

AndroidSVG is a SVG parser and renderer for Android. It has almost complete support for the static visual elements of the SVG 1.1 and SVG 1.2 Tiny specifications (except for filters).

AndroidSVG is licensed under the Apache License v2.0.

More information, including downloads and documentation, is available at the main AndroidSVG site.

Find a bug?

Please file a bug report and include as much detail as you can. If possible, please include a sample SVG file showing the error.

If you wish to contact the author with feedback on this project, you can email me at [email protected].

Using AndroidSVG in your app?

If you have found AndroidSVG useful and are using it in your project, please let me know. I'd love to hear about it!

Comments
  • Feature request: replace colours

    Feature request: replace colours

    The svg-android library allows you to substitute one colour for another at 
    parse time.  Each of the parser methods have a variant that takes two extra 
    parameters: searchColor and replaceColor.
    
    This feature has been requested in AndroidSVG as well.
    
    Some additional thoughts:
    
    1. Having just a single search and replace color seems a bit limiting.
    
      I would imagine that having a new method:
    
      SVG.replaceColour(searchColour, replaceColour);
    
      that could be called multiple times to build up a colour map would be more useful.  Or perhaps:
    
       SVG.getColourMap().add(searchColour, replaceColour);
       SVG.setColourMap(newColourMap);
    
    2. Perhaps other colour transformation options like:
    
       SVG.setColourMatrix(colourMatrix);
    
       Would that be useful to anyone?
    
    3. Another possibility would be adding support for SVG Parameters 
    (http://www.w3.org/TR/SVGParamPrimer/)
    
    Please upvote and comment if you need, or would use, colour mapping 
    functionality.
    
    Your feedback is appreciated.
    
    
    
    

    Original issue reported on code.google.com by [email protected] on 19 Jul 2013 at 9:50

    auto-migrated 
    opened by GoogleCodeExporter 30
  • Impossible to include with Android Studio

    Impossible to include with Android Studio

    When I try to add this library to Android Studio I follow the following method:
    
    1. Download zip of androidsvg lib
    2. Unzip
    3. (From Android Studio) File -> Import Project...
    4. Select the proper input folder
    5. Select the proper output folder
    6. Leave all settings checked as default
    
    When the importation ends, the androidsvg package still does not appear in the 
    interface and no errors are reported.
    

    Original issue reported on code.google.com by [email protected] on 8 Apr 2014 at 10:15

    feature request auto-migrated 
    opened by GoogleCodeExporter 29
  • Invalid Layer Save Flag - only ALL_SAVE_FLAGS is allowed

    Invalid Layer Save Flag - only ALL_SAVE_FLAGS is allowed

    I am getting the exception below occasionally when trying to execute the following code with compileSdkVersion 28 and Java 7. I am using com.caverock:androidsvg:1.2.1.

    GlideApp.with(context)
                    .as(PictureDrawable.class)
                    .listener(new SvgSoftwareLayerSetter())
                    .load("http://example.com/foo.svg")
                    .into(target);
    
    public class SvgDrawableTranscoder implements ResourceTranscoder<SVG, PictureDrawable> {
        @Nullable
        @Override
        public Resource<PictureDrawable> transcode(@NonNull Resource<SVG> toTranscode,
                                                   @NonNull Options options) {
            SVG svg = toTranscode.get();
            Picture picture = svg.renderToPicture();
            PictureDrawable drawable = new PictureDrawable(picture);
            return new SimpleResource<>(drawable);
        }
    }
    
    public class SvgDecoder implements ResourceDecoder<InputStream, SVG> {
    
        @Override
        public boolean handles(@NonNull InputStream source, @NonNull Options options) {
            return true;
        }
    
        public Resource<SVG> decode(@NonNull InputStream source, int width, int height,
                                    @NonNull Options options)
                throws IOException {
            try {
                SVG svg = SVG.getFromInputStream(source);
                return new SimpleResource<>(svg);
            } catch (SVGParseException ex) {
                throw new IOException("Cannot load SVG from stream", ex);
            }
        }
    }
    
    
    @GlideModule
    public class SvgModule extends AppGlideModule {
        @Override
        public void registerComponents(@NonNull Context context, @NonNull Glide glide,
                                       @NonNull Registry registry) {
            registry.register(SVG.class, PictureDrawable.class, new SvgDrawableTranscoder())
                    .append(InputStream.class, SVG.class, new SvgDecoder());
        }
    
        // Disable manifest parsing to avoid adding similar modules twice.
        @Override
        public boolean isManifestParsingEnabled() {
            return false;
        }
    }
    

    Exception:

    07-12 22:20:14.474 10798-10847/com.example.n1try.myapp E/GlideExecutor: Request threw uncaught throwable
        java.lang.IllegalArgumentException: Invalid Layer Save Flag - only ALL_SAVE_FLAGS is allowed
            at android.graphics.Canvas.checkValidSaveFlags(Canvas.java:378)
            at android.graphics.Canvas.saveLayerAlpha(Canvas.java:555)
            at com.caverock.androidsvg.SVGAndroidRenderer.pushLayer(SVGAndroidRenderer.java:677)
            at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:982)
            at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:298)
            at com.caverock.androidsvg.SVGAndroidRenderer.renderChildren(SVGAndroidRenderer.java:330)
            at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:584)
            at com.caverock.androidsvg.SVGAndroidRenderer.renderDocument(SVGAndroidRenderer.java:267)
            at com.caverock.androidsvg.SVG.renderToPicture(SVG.java:306)
            at com.caverock.androidsvg.SVG.renderToPicture(SVG.java:286)
            at com.example.n1try.myapp.utils.svg.SvgDrawableTranscoder.transcode(SvgDrawableTranscoder.java:26)
            at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:47)
            at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:58)
            at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:43)
            at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:501)
            at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:472)
            at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:458)
            at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:410)
            at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:379)
            at com.bumptech.glide.load.engine.DataCacheGenerator.onDataReady(DataCacheGenerator.java:95)
            at com.bumptech.glide.load.model.FileLoader$FileFetcher.loadData(FileLoader.java:76)
            at com.bumptech.glide.load.engine.DataCacheGenerator.startNext(DataCacheGenerator.java:75)
            at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302)
            at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:269)
            at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233)
            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)
            at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446)
    
    bug bug in android 
    opened by muety 19
  • Rendered SVG Picture is blurry.

    Rendered SVG Picture is blurry.

    What steps will reproduce the problem?
    1. read svhttps://code.google.com/p/androidsvg/issues/entryg resource from 
    input stream stored inside a jar file
    2. renderToPicture
    3. set PictureDrawable to a ImageView.
    
    What is the expected output? What do you see instead?
    The image renders, however the image is blurry. 
    
    What version of the product are you using? On what operating system?
    news beta version. android 4.02
    
    Please provide any additional information below.
    
    

    Original issue reported on code.google.com by [email protected] on 3 Jul 2014 at 4:27

    auto-migrated 
    opened by GoogleCodeExporter 18
  • Sometimes uncorrectly loads embeded images

    Sometimes uncorrectly loads embeded images

    What steps will reproduce the problem?
    1. Load attached "test1.svg" in SVGImageView. 
    
    What is the expected output? What do you see instead?
    It contains three embeded pngs. Opening this svg in IE9 shows embeded pngs 
    correctly any time i load svg.
    What i see:
    Sometimes after rendering images, i see "trashed" images instead of real. 
    
    What version of the product are you using? On what operating system?
    1.2.0.
    OS: Android 4.1.2.
    Hardware Galaxy Note 10.1 (2012 year)
    
    
    

    Original issue reported on code.google.com by [email protected] on 17 Dec 2013 at 10:07

    Attachments:

    auto-migrated 
    opened by GoogleCodeExporter 17
  • svg attribute not recognized when using the lib from Maven repository through Gradle

    svg attribute not recognized when using the lib from Maven repository through Gradle

    I've replaced the local copy of the sources (from google code) with the link to "compile 'com.caverock:androidsvg:1.2.1'" (or 1.2.2-beta1) and during build I'm getting the following error:

    Error:(54) No resource identifier found for attribute 'svg' in package 'com.money.manager.ex'

    The namespace is set to

    xmlns:svgimageview="http://schemas.android.com/apk/res-auto"
    

    in the root LinearLayout, and the image view looks like this

        <com.caverock.androidsvg.SVGImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:layout_margin="40dp"
            android:scaleType="fitCenter"
            svgimageview:svg="tutorial_images/accounts.svg"/>
    

    Naturally, this all works when the project is compiled from source together with the main app but when I want to use the reference to a binary from Maven repository, the build errors appear. I've tried a few simple things but none of them worked. Like, removing the namespace will compile correctly but crash during runtime, etc. The main issue is that the simple replacement does not work out of the box. I will look into this a bit more when I find some time.

    More info: using Android Studio with Gradle

    opened by alensiljak 16
  • SVGImageView crashes on Android 5.0 and higher

    SVGImageView crashes on Android 5.0 and higher

    What steps will reproduce the problem?
    Using the following code will crash 5.0 and above with a segfault from the OS:
    
    private FrameLayout mIdCardContainer;
    private SVGImageView mIdCardBackImage;
    private SVGImageView mIdCardFrontImage;
    
    mIdCardFrontImage = new SVGImageView(getActivity());
    mIdCardFrontImage.setId(R.id.img_id_card_front);
    mIdCardFrontImage.setLayoutParams(new 
    ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
    ViewGroup.LayoutParams.MATCH_PARENT));
    mIdCardFrontImage.setContentDescription(getString(R.string.front_of_id_card));
    mIdCardFrontImage.setRotation(ROTATION_ANGLE);
    
    
    // Setup special SVGImageViews for back of card
    mIdCardBackImage = new SVGImageView(getActivity());
    mIdCardBackImage.setId(R.id.img_id_card_back);
    mIdCardBackImage.setLayoutParams(new 
    ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
    ViewGroup.LayoutParams.MATCH_PARENT));
    mIdCardBackImage.setContentDescription(getString(R.string.back_of_id_card));
    mIdCardBackImage.setRotation(ROTATION_ANGLE);
    mIdCardBackImage.setVisibility(View.GONE);
    
    
    SVG frontSvg = SVG.getFromString( idCard.getCardFrontData() );
    SVG backSvg = SVG.getFromString( idCard.getCardBackData() );
    
    mIdCardFrontImage.setSVG(frontSvg);
    mIdCardBackImage.setSVG(backSvg);
    
    What is the expected output? What do you see instead?
    Some devices crash immediately on setting the images others fail miserably when 
    the two images are flipped with an animation front -> tap -> back -> tap -> 
    crash
    
    What version of the product are you using? On what operating system?
    1.2.2-beta-1
    
    Please provide any additional information below.
    This works fine on 4.1-4.4.2
    This does not work at all on Genymotion, or on certain devices.
    The crash after flipping back to the front image crashes on the Samsung S6 
    running 5.0.2, but works on a nexus 5 running 5.0.
    
    
    

    Original issue reported on code.google.com by [email protected] on 7 May 2015 at 6:47

    invalid wont fix auto-migrated 
    opened by GoogleCodeExporter 15
  • ArrayIndexOutOfBoundsException

    ArrayIndexOutOfBoundsException

    I have encountered this exception with your library, which is pretty great, by the way.

    Line of code that throws: W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.arcTo(SVGAndroidRenderer.java:2699)

    Full stacktrace: W/System.err: java.lang.ArrayIndexOutOfBoundsException: length=0; index=-2 W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.arcTo(SVGAndroidRenderer.java:2699) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.access$700(SVGAndroidRenderer.java:90) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer$PathConverter.arcTo(SVGAndroidRenderer.java:2561) W/System.err: at com.caverock.androidsvg.SVG$PathDefinition.enumeratePath(SVG.java:2303) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer$PathConverter.(SVGAndroidRenderer.java:2518) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:1065) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:343) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.renderChildren(SVGAndroidRenderer.java:375) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:621) W/System.err: at com.caverock.androidsvg.SVGAndroidRenderer.renderDocument(SVGAndroidRenderer.java:308) W/System.err: at com.caverock.androidsvg.SVG.renderToCanvas(SVG.java:536) W/System.err: at com.caverock.androidsvg.SVG.renderToCanvas(SVG.java:490) ------- My code ------- W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:333) W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266) W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) W/System.err: at java.lang.Thread.run(Thread.java:764)

    For your reference, here is the svg data I am trying to parse so you can test. Zip of SVG

    bug 
    opened by hellaandrew 13
  • Crashes Proguard

    Crashes Proguard

    Problem: I'm getting the following error for Android SVG when using proguard:

    Warning: com.caverock.androidsvg.SVGImageView: can't find referenced class com.caverock.androidsvg.R$styleable
    Warning: com.caverock.androidsvg.SVGImageView: can't find referenced class com.caverock.androidsvg.R$styleable
    Warning: com.caverock.androidsvg.SVGImageView: can't find referenced class com.caverock.androidsvg.R
    

    Using the following configuration fixes the issue:

    -dontwarn com.caverock.androidsvg.**
    

    Request: It'd be nice if there was a recommended proguard config. I believe they can even be packaged with android libraries so that your users wouldn't even have to think about it, but would automatically be imported.

    feature request 
    opened by ScottPierce 13
  • NullPointerException when points attribute is missing in polyline/polygon elements.

    NullPointerException when points attribute is missing in polyline/polygon elements.

    An exception thrown java.lang.NullPointerException: Attempt to get length of null array at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:1367) at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:375) at com.caverock.androidsvg.SVGAndroidRenderer.renderChildren(SVGAndroidRenderer.java:395) at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:649) at com.caverock.androidsvg.SVGAndroidRenderer.renderDocument(SVGAndroidRenderer.java:328) at com.caverock.androidsvg.SVG.renderToCanvas(SVG.java:603) at com.caverock.androidsvg.SVG.renderToCanvas(SVG.java:557)

    bug 
    opened by cbukenya 12
  • Large SVG(1000x1000) does not load on Software Layer

    Large SVG(1000x1000) does not load on Software Layer

    Glide Version: 4.12.0

    Integration libraries: https://github.com/BigBadaboom/androidsvg

    Device/Android Version: Pixel 4 API 30 emulator and misc android physical devices

    Issue details / Repro steps / Use case background: If you run on a Pixel 4 API 30 emulator in portrait the android image displays. In landscape it does not show the image but instead just the background.

    Actual: Landscape with the sample project with aspect ratio 3:2 does not display image

    Expected: Landscape with sample project with aspect ratio 3:2 does display android icon

    Important Note: If you choose aspect ratio 3:1 it works

    Glide load line / GlideModule (if any) / list Adapter code (if any): https://github.com/DavidCorrado/GlideSVGBug

            val requestBuilder = GlideApp.with(this)
                .`as`(PictureDrawable::class.java)
                .transition(withCrossFade())
                .listener(SvgSoftwareLayerSetter())
            requestBuilder.load(Uri.parse("https://upload.wikimedia.org/wikipedia/commons/d/d7/Android_robot.svg")).into(findViewById(R.id.articleHeaderImage))
    

    All code copied from https://github.com/bumptech/glide/tree/master/samples/svg

    Layout XML: <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent">

    <ImageView
        android:id="@+id/articleHeaderImage"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:contentDescription="@null"
        app:layout_constraintDimensionRatio="3:2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:background="#0289A0" />
    

    </androidx.constraintlayout.widget.ConstraintLayout>

    Stack trace / LogCat: N/A

    opened by DavidCorrado 11
  • Corner case bug - gradient radius 0 on Android SDK 31+ leads to NullPointerException

    Corner case bug - gradient radius 0 on Android SDK 31+ leads to NullPointerException

    Describe the bug In this line in SVGAndroidRenderer, if SUPPORTS_RADIAL_GRADIENT_WITH_FOCUS is true (we're on Android SDK 31 or above), then the colours array will be null, which will throw a NullPointerException.

    To Reproduce I've found this when checking the code, so haven't reproduced this in practice, but in theory it would be:

    1. Render an SVG that contains a radial gradient with radius 0, on Android 31 or above

    Expected behavior 2. Rendering works

    Stack traces

    SVG file

    Screenshots

    Device

    • Android SDK 31 or above

    Additional context

    bug 
    opened by attilatanyi 1
  • Text rendering rewrite

    Text rendering rewrite

    The rendering of text is being completely rewritten. Among the improvements:

    • Correct handling of nested layout with differing text properties (includes fix for #241 etc)
    • Proper text shaping. At least for non-txtPath elements
    • Correct handling for RTL text
    • Support for writing-mode and vertical text (see #151)
    • etc

    Not yet confirmed:

    • Support multi-value text geometry attributes feature request (#248)
    • Support alignment-baseline and dominant-baseline feature request (#247)
    • textLength attribute is not used feature request (#216)
    • support @font-face (#206)
    opened by BigBadaboom 0
  • Support multi-value text geometry attributes

    Support multi-value text geometry attributes

    Issue

    I find this question when load svg file.

    normal image23

    But lost the '<' when useing this library to load the svg: image

    Solution

    SVGAndroidRenderer.java

       private void enumerateTextSpans(TextContainer obj, TextProcessor textprocessor)
       {
          if (!display())
             return;
    
          Iterator<SvgObject>  iter = obj.children.iterator();
          boolean              isFirstChild = true;
    
          // get the array of x info
          List<Length> xList = null;
          int size = 0;
          if (obj instanceof Text){
             xList = ((Text) obj).x;
             size = xList.size();
          }
    
          while (iter.hasNext())
          {
             SvgObject  child = iter.next();
    
             if (child instanceof TextSequence) {
                final String text = ((TextSequence) child).text;
                //When the length of the string is greater than 1 and consistent with the length of the X coordinate array, each character needs to be drawn separately
                if (text.length() > 1 && text.length() == size){
                   for (int i = 0;i < text.length();i++){
                      String s = text.substring(i,i+1);
                      if (textprocessor instanceof PlainTextDrawer){
                         ((PlainTextDrawer) textprocessor).x = xList.get(i).value;
                      }
                      textprocessor.processText(s);
                   }
                }else {
                   textprocessor.processText(textXMLSpaceTransform(text, isFirstChild, !iter.hasNext() /*isLastChild*/));
                }
             } else {
                processTextChild(child, textprocessor);
             }
             isFirstChild = false;
          }
       }
    
    feature request 
    opened by zhang-hai 1
  • Support alignment-baseline and dominant-baseline

    Support alignment-baseline and dominant-baseline

    The library unsupported vertical alignment text

    SVG

    <?xml version='1.0' encoding='utf-8'?>
    <svg height='40' width='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'>
      <rect x="0" y="0" width="40" height="40" fill="white" stroke="black"/>
      <path d="M 0 20 H 40" stroke="black"/>
      <path d="M 20 0 V 40" stroke="black"/>
      <text x='20' y='20' text-anchor='middle'
        alignment-baseline='middle' dominant-baseline='middle'
        font-size='14'>Test</text>
    </svg>
    

    The resulting picture

    [Library picture]1

    Picture in browser

    [Browser picture]2

    feature request 
    opened by anton-shchyrov 3
  • Text-Anchor isn't being respected in the SVG

    Text-Anchor isn't being respected in the SVG

    I am downloading the following SVG over a network request

    <svg xmlns="http://www.w3.org/2000/svg" id="rectangle-white-2" width="60" height="42" viewBox="0 0 20 14">
      <g>
        <path d="M0,0 H20 V14 H0 Z" fill="none"/>
        <path d="M3,1 H17 C17,1 19,1 19,3 V11 C19,11 19,13 17,13 H3 C3,13 1,13 1,11 V3 C1,3 1,1 3,1" fill="none" stroke="hsl(230, 18%, 13%)" stroke-linejoin="round" stroke-miterlimit="4px" stroke-width="2px"/>
        <path d="M3,1 H17 C17,1 19,1 19,3 V11 C19,11 19,13 17,13 H3 C3,13 1,13 1,11 V3 C1,3 1,1 3,1" fill="hsl(0, 0%, 100%)"/>
      </g>
      <text x="10px" y="10px" font-weight="bold" font-family="Arial">
      	<tspan text-anchor="middle" fill="black" font-size="9">123</tspan>
      </text>
    </svg>
    

    Once I get the SVG above, I render it to a Bitmap and then use it with a normal ImageView.

    Actual output

    As seen in the android app Screen Shot 2021-12-03 at 6 28 18 PM

    Expected output

    As seen in a SVG viewer Screen Shot 2021-12-03 at 6 22 38 PM

    bug 
    opened by abhishek1508 5
Use a jar executable to create a Drawable class to display a SVG on Android.

SVG2Drawable Use a jar executable to create a Drawable class to display a SVG on Android. This is a standalone library, not a Runtime Android library.

Stan Kocken 202 Nov 28, 2022
Transforms a Vector Drawable or a SVG path to a Compose ImageVector

Svg2Compose Transforms a Vector Drawable or a SVG path to a Compose ImageVector. Download Download the latest version (Windows) here: Releases. How to

Denis Mondon 18 Dec 22, 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
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
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
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
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
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
🎨 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
An Android library for scanning documents based on CameraX API and a tiny version of OpenCV

Document Scanner with tiny OpenCV example1.mp4 Document Scanner is an Android library (kotlin based) for scanning documents based on CameraX API and a

null 8 May 12, 2022
Image Cropping Library for Android

Image Cropping Library for Android

Lyrebird Studio 1.1k Dec 30, 2022
v9 is an Android library that provides the ability to dynamically resize Path objects as you would 9-patch bitmaps

v9 is an Android library that provides the ability to dynamically resize Path objects as you would 9-patch bitmaps. In the example below, the chat bubble is dynamically resized while preserving the corners:

Romain Guy 304 Dec 27, 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