{"id":37020772,"url":"https://github.com/miko3k/mejico","last_synced_at":"2026-01-14T02:25:41.046Z","repository":{"id":57739260,"uuid":"152486131","full_name":"miko3k/mejico","owner":"miko3k","description":"A library to read .ico files in Java. Chingón.","archived":false,"fork":true,"pushed_at":"2019-06-18T23:47:15.000Z","size":840,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-09T21:16:16.311Z","etag":null,"topics":["android-library","awt-graphics","bufferedimage","ico","icon","java-library","windows-icon"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"imcdonagh/image4j","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miko3k.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-10T20:33:04.000Z","updated_at":"2023-05-06T13:43:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/miko3k/mejico","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/miko3k/mejico","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miko3k%2Fmejico","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miko3k%2Fmejico/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miko3k%2Fmejico/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miko3k%2Fmejico/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miko3k","download_url":"https://codeload.github.com/miko3k/mejico/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miko3k%2Fmejico/sbom","scorecard":{"id":646405,"data":{"date":"2025-08-11","repo":{"name":"github.com/miko3k/mejico","commit":"99cb2fca62f915d4457b77e33eec5c31bfe7b514"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"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":"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":"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":"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":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"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-21T12:15:12.884Z","repository_id":57739260,"created_at":"2025-08-21T12:15:12.884Z","updated_at":"2025-08-21T12:15:12.884Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["android-library","awt-graphics","bufferedimage","ico","icon","java-library","windows-icon"],"created_at":"2026-01-14T02:25:40.439Z","updated_at":"2026-01-14T02:25:41.041Z","avatar_url":"https://github.com/miko3k.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mejico\n\nA library to read `.ico`/`.cur` files in Java. Chingón.\n\n## Overview\n\nThe `mejico` a small library to read Microsoft `.ico` or `.cur` format in java.\n\n* a commercial-friendly license\n* no dependencies on third-party libraries\n* comprehensively unit tested\n* fully compatible with .ico format\n\nAll versions should be supported. Hopefully. Please file a bug and help to improve this library\nif you find an `.ico` or `.cur` file in the wild, which can be read by any version of Windows \nand this library fails to do so. \n\n### Artifcats\n\nI decided to stop publishing to Maven Central, coz it is annoying. \n\nSimply snatch this from it from [jitpack](https://jitpack.io/#miko3k/mejico/26b5f1d8c4). Do not forget to\nselect correct subproject in the dropdown menu!\n\nShould this project find heavy use, I might consider publishing to Maven Central again.\n\n\n### Structure\n\nThis project is split into multiple subprojects. Your application should depend on one of the first two.\n* `mejico-awt` - decoder which returns `java.awt.image.BufferedImage`\n* `mejico-andorid` - decoder which returns `android.graphics.Bitmap`\n* `mejico-core` - core decoding routines, mostly coming from `image4j`\n* `mejico-test` - utility classes for unit testing, not intended for public use\n\nLoading of PNG data is delegated to native facilities. This is the main reason why we have\nseparate Android and AWT artifacts. You might want to depend on `mejico-core` only, if you want\nto supply your own PNG (or even BMP) decoder.\n\n## Usage\n\nThere are two classes with static factory methods to obtain an [`IconParser`](mejico-core/src/main/java/org/deletethis/mejico/IconParser.java), depending on the platform:\n* [`AwtMejico.getIconParser()`](mejico-awt/src/main/java/org/deletethis/mejico/awt/AwtMejico.java), returns [`IconParser\u003cBufferedImage\u003e`](https://docs.oracle.com/javase/8/docs/api/java/awt/image/BufferedImage.html)\n* [`AndroidMejico.getIconParser()`](mejico-android/src/main/java/org/deletethis/mejico/android/AndroidMejico.java), returns [`IconParser\u003cBitmap\u003e`](https://developer.android.com/reference/kotlin/android/graphics/Bitmap)\n\n\nCheck [`IconParser`](mejico-core/src/main/java/org/deletethis/mejico/IconParser.java)\nto see the high level API. It can return a `List` of images contained in `.ico` file. \n\nLower level API is in the [`IconReader`](mejico-core/src/main/java/org/deletethis/mejico/IconReader.java) \nclass and allows to retrieve image metadata first (including the hotspot position for `.cur` files) and decode \nselected images afterwards.\n  \n\n### Examples\n\n```java\n// AWT example\nimport java.awt.image.BufferedImage;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport org.deletethis.mejico.awt.AwtMejico;\n\nclass Main {\n    public static void main(String[] args) throws IOException {\n        InputStream stream = Main.class.getResourceAsStream(\"bundled_icon.ico\");\n        List\u003cBufferedImage\u003e images = AwtMejico.getIconParser().getIcons(Main.class.getResourceAsStream(\"bundled_icon.ico\"));\n        // do something with images\n    }    \n}\n```\n\n```java\n// Android example\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport android.graphics.Bitmap;\nimport android.app.Activity;\nimport android.os.Bundle;\nimport org.deletethis.mejico.android.AndroidMejico;\n\nclass MyActivity extends Activity {\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        try {\n            InputStream stream = getResources().openRawResource(R.raw.resource_id);\n            List\u003cBitmap\u003e images = AndroidMejico.getIconParser().getIcons(stream);\n            \n            // do something with images\n            \n        } catch(IOException ex) {\n            throw new IllegalStateException(\"Cannot open resource\");\n        }\n    }\n} \n```\n\n## License\n\nThe `mejico` library is licensed under the GNU LGPL v2.1 so you are free to use it in\n your Free Software and Open Source projects, as well as commercial projects, \n under the terms of the LGPL v2.1.\n\n## History\n\nThis is a fork of [image4j](https://github.com/imcdonagh/image4j). I changed the code\nbeyond recognition, added a battery of unit tests, ditched many parts including\nencoding and general purpose BMP decoder.\n\n## Future\n\nI plan to maintain this library. More or less.\n\nIf you encounter bugs, please do not hesitate to report them.\n\n## Credits\n\n* [image4j](https://github.com/imcdonagh/image4j)\n* The [File Formats page at DaubNET](https://www.daubnet.com/en/file-formats) for information \n  on various image formats\n* GIMP, which we use for editing images\n\n## Disclaimer\n\nTo my or original author knowledge, there are no patents on either the BMP or ICO formats.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiko3k%2Fmejico","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiko3k%2Fmejico","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiko3k%2Fmejico/lists"}