{"id":21129982,"url":"https://github.com/lexs/webimageloader","last_synced_at":"2026-01-25T12:33:12.398Z","repository":{"id":4039578,"uuid":"5140927","full_name":"lexs/webimageloader","owner":"lexs","description":"Library to handle asynchronous image loading on Android.","archived":false,"fork":false,"pushed_at":"2022-05-20T20:52:43.000Z","size":2041,"stargazers_count":101,"open_issues_count":7,"forks_count":21,"subscribers_count":16,"default_branch":"develop","last_synced_at":"2025-08-13T03:55:59.160Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","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/lexs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-07-22T10:59:11.000Z","updated_at":"2023-08-13T11:40:58.000Z","dependencies_parsed_at":"2022-09-26T22:00:33.432Z","dependency_job_id":null,"html_url":"https://github.com/lexs/webimageloader","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/lexs/webimageloader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexs%2Fwebimageloader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexs%2Fwebimageloader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexs%2Fwebimageloader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexs%2Fwebimageloader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lexs","download_url":"https://codeload.github.com/lexs/webimageloader/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexs%2Fwebimageloader/sbom","scorecard":{"id":586627,"data":{"date":"2025-08-11","repo":{"name":"github.com/lexs/webimageloader","commit":"b29bac036a3855e2f0adf95d3391ee4bbc14457c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.1,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":3,"reason":"7 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-2x83-r56g-cv47","Warn: Project is vulnerable to: GHSA-7r82-7xv7-xcpj","Warn: Project is vulnerable to: GHSA-cfh5-3ghh-wfjx","Warn: Project is vulnerable to: GHSA-fmj5-wv96-r2ch","Warn: Project is vulnerable to: GHSA-gw85-4gmf-m7rh","Warn: Project is vulnerable to: GHSA-3vqj-43w4-2q58","Warn: Project is vulnerable to: GHSA-4jq9-2xhw-jpx7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T20:41:12.233Z","repository_id":4039578,"created_at":"2025-08-20T20:41:12.233Z","updated_at":"2025-08-20T20:41:12.233Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28752994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T10:25:12.305Z","status":"ssl_error","status_checked_at":"2026-01-25T10:25:11.933Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-20T05:32:08.756Z","updated_at":"2026-01-25T12:33:12.383Z","avatar_url":"https://github.com/lexs.png","language":"Java","funding_links":[],"categories":["Libs"],"sub_categories":["\u003cA NAME=\"Image_Loading\"\u003e\u003c/A\u003eImage Loading"],"readme":"WebImageLoader\n==============\n\nWebImageLoader is a library designed to take to hassle out of handling images on the web. It has the following features:\n\n* Images are downloaded on a background thread pool and saved to disk and memory.\n* Disk and memory cache size is configurable and can even be reconfigured on the fly.\n* Separate thread do load images back from disk after being cached, reducing I/O bottlenecks on most phones.\n* Reusing requests when the same image is requested multiple times.\n* Respects cache-control and expires headers and will refetch images when they expire (using conditional get).\n* Support image transformations which are also cached to disk and memory.\n* Support to do synchronous fetches while still taking advantage of the cache.\n* Support for download progress callbacks.\n* Easy setup without singletons.\n* Compatible with API level 7 and up.\n* Only depends on [DiskLruCache][DiskLruCache].\n\nUsage\n=====\n\nUse the builder to build an ImageLoader that suits your needs.\n\n```java\n// Get memory class of this device, exceeding this amount will throw an\n// OutOfMemory exception.\nActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);\nint memClass = am.getMemoryClass();\n\n// Use part of the available memory for memory cache.\nfinal int memoryCacheSize = 1024 * 1024 * memClass / 8;\n\nFile cacheDir = new File(getExternalCacheDir(), \"images\");\nImageLoader imageLoader = new ImageLoader.Builder(context)\n        .enableDiskCache(cacheDir, 10 * 1024 * 1024)\n        .enableMemoryCache(memoryCacheSize).build();\n```\n\nOr use the provided Applications class for convenience and reasonable defaults (which you can override!)\n\n```xml\n\u003capplication android:name=\"com.webimageloader.ext.ImageLoaderApplication\"\u003e\n    \u003c!-- Your app --\u003e\n\u003c/application\u003e\n```\n\nRetrive your loader like this.\n\n```java\nImageLoader imageLoader = ImageLoaderApplication.getLoader(context);\n```\n\nLoading images\n--------------\n\nLoading images is simple if you want it to be.\n\n```java\n// This will show a nice fade in when the image has loaded\nnew ImageHelper(context, imageLoader)\n        .setFadeIn(true)\n        .load(imageView, \"http://example.com/image.png\");\n```\n\nYou can also use specify a loading and failure image\n\n```java\nnew ImageHelper(context, imageLoader)\n        .setLoadingResource(R.drawable.loading)\n        .setErrorResource(R.drawable.error)\n        .load(imageView, \"http://example.com/image.png\");\n```\n\nLoading images can also be done more explicit if needed.\n\n```java\nBitmap b = loader.load(imageView, \"http://example.com/image.png\", new Listener\u003cImageView\u003e() {\n    @Override\n    public void onSuccess(ImageView v, Bitmap b) {\n        // Everything went well\n        v.setImageBitmap(b);\n    }\n\n    @Override\n    public void onError(ImageView v, Throwable t) {\n        // Something went wrong\n        Log.d(\"MyApp\", \"Failed to load image\", t);\n    }\n});\n\n// Did we get an image immediately?\nif (b != null) {\n    imageView.setImageBitmap(b);\n}\n```\n\nTransformations\n---------------\n\nYou can transform (and cache!) the images you get.\n\n```java\nfinal int width = 100;\nfinal int height = 100;\n        \nTransformation t = new SimpleTransformation() {\n    @Override\n    public String getIdentifier() {\n        // Pass a unique identifier for caching\n        return \"scale-\" + width + \"x\" + height;\n    }\n    \n    @Override\n    public Bitmap transform(Bitmap b) {\n        return Bitmap.createScaledBitmap(b, width, height, true);\n    }\n};\n\nnew ImageHelper(this, imageLoader)\n        .load(imageView, \"http://example.com/image.png\", t);\n```\n\nProgress\n========\n\nProgress is easy if you have a [ProgressBar][ProgressBar], it will only be shown when when needed.\n\n```java\n// Automatically update the progress bar\nnew ImageHelper(context, imageLoader)\n        .load(imageView, progressBar, \"http://example.com/image.png\");\n```\n\nOr handle progress yourself.\n\n```java\nBitmap b = loader.load(imageView, \"http://example.com/image.png\", new Listener\u003cImageView\u003e() {\n    @Override\n    public void onSuccess(ImageView v, Bitmap b) {\n        // Same as above\n    }\n\n    @Override\n    public void onError(ImageView v, Throwable t) {\n        // Same as above\n    }\n}, new ProgressListener() {\n    @Override\n    public void onProgress(float value) {\n        // value is in the range 0f-1f\n    }\n});\n```\n\nObtaining\n=========\n\nYou can include the library by [downloading the .jar][jar] and also adding [DiskLruCache][DiskLruCache] to your project.\n\nIf you are a Maven user, simply add the following to your `pom.xml`:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.webimageloader\u003c/groupId\u003e\n    \u003cartifactId\u003ewebimageloader\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n``` \n\nDeveloped By\n============\n\n* Alexander Blom - [alexanderblom.se](http://alexanderblom.se)\n\nLicense\n=======\nWebImageLoader is licensed under Apache 2.0. If you find this library useful feel free to send me a tweet (or not).\n\n    Copyright 2012 Alexander Blom\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n[jar]: http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22webimageloader%22\n[DiskLruCache]: https://github.com/JakeWharton/DiskLruCache\n[ProgressBar]: https://developer.android.com/reference/android/widget/ProgressBar.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexs%2Fwebimageloader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flexs%2Fwebimageloader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexs%2Fwebimageloader/lists"}