{"id":19260593,"url":"https://github.com/evant/android-apngrs","last_synced_at":"2025-06-13T09:04:40.156Z","repository":{"id":126436084,"uuid":"610112576","full_name":"evant/android-apngrs","owner":"evant","description":"Android bindings to image-rs for APNG support.","archived":false,"fork":false,"pushed_at":"2024-09-09T08:12:01.000Z","size":294,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-21T16:41:59.899Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evant.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-06T05:39:07.000Z","updated_at":"2024-09-09T08:12:04.000Z","dependencies_parsed_at":"2024-08-25T04:24:51.740Z","dependency_job_id":"1369e671-0eb0-4806-8369-c30b8c5498a1","html_url":"https://github.com/evant/android-apngrs","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/evant/android-apngrs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evant%2Fandroid-apngrs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evant%2Fandroid-apngrs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evant%2Fandroid-apngrs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evant%2Fandroid-apngrs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evant","download_url":"https://codeload.github.com/evant/android-apngrs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evant%2Fandroid-apngrs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259616247,"owners_count":22884878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T19:21:56.930Z","updated_at":"2025-06-13T09:04:40.134Z","avatar_url":"https://github.com/evant.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://circleci.com/gh/evant/android-apngrs.svg?style=svg\u0026circle-token=8792fa19911be92d6a1d66dd45ece3bf6712f778)](https://circleci.com/gh/evant/android-apngrs)[![Maven\nCentral](https://img.shields.io/maven-central/v/me.tatarka.android/apngrs)](https://search.maven.org/search?q=g:me.tatarka.android)\n[![Sonatype Snapshot](https://img.shields.io/nexus/s/https/oss.sonatype.org/me.tatarka.android/android-apngrs.svg)](https://oss.sonatype.org/content/repositories/snapshots/me/tatarka/android/)\n\n# android-apngrs\n\nBindings to [image-rs](https://github.com/image-rs/image) for APNG support on Android.\n\n# Usage\n\nYou can include the decoder with\n\n```kotlin\nimplementation(\"me.tatarka.android:apngrs:0.4\")\n```\n\nThen you can create a source and decode a drawable. The api is mirrored after\n[ImageDecoder](https://developer.android.com/reference/android/graphics/ImageDecoder).\n\n```kotlin\nval source = ApngDecoder.source(resources, R.drawable.my_animated_png)\nval drawable = ApngDecoder.decodeDrawable(source)\ndrawable.start() // to start the animation.\n```\n\n## Coil Integration\n\nFor easy [coil](https://coil-kt.github.io/coil/) integration, include\n\n```kotlin\nimplementation(\"me.tatarka.android:apngrs-coil:0.4\")\n```\n\nand then add the decoder\n\n```kotlin\nval imageLoader = ImageLoader.Builder(context)\n    .components {\n        add(ApngDecoderDecoder.Factory())\n    }\n    .build()\n```\n\n## Current Limitations/Possible Future Directions\n\n- All animations are currently rendered as looping infinitely instead of respecting the num_plays\n  value.\n- Image data is loaded first into a byte array in memory before decoding, could do some sort of\n  streaming support here if I could figure out the jni bits for that.\n- image-rs actually supports a wide range of image formats but only APNGs are currently supported.\n  May be expanded in the future if there's value.\n- Source inputs are limited to byte arrays and resources, this could be expanded pretty easily.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevant%2Fandroid-apngrs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevant%2Fandroid-apngrs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevant%2Fandroid-apngrs/lists"}