{"id":18616505,"url":"https://github.com/marcauberer/adobe-color-tool","last_synced_at":"2025-07-03T06:01:57.506Z","repository":{"id":36969808,"uuid":"324984915","full_name":"marcauberer/adobe-color-tool","owner":"marcauberer","description":"🎨 Android library for importing / exporting colors as ACO \u0026 ASE files","archived":false,"fork":false,"pushed_at":"2024-10-02T04:28:57.000Z","size":1866,"stargazers_count":6,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-11T11:31:41.138Z","etag":null,"topics":["aco","adobe","android","ase","rgb"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcauberer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null},"funding":{"github":["marcauberer"],"custom":"https://www.paypal.me/marcauberer"}},"created_at":"2020-12-28T10:46:28.000Z","updated_at":"2024-10-20T21:43:53.000Z","dependencies_parsed_at":"2023-11-24T07:29:18.617Z","dependency_job_id":"81b5a026-488a-4310-b1d3-68a5d7650ed3","html_url":"https://github.com/marcauberer/adobe-color-tool","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/marcauberer/adobe-color-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcauberer%2Fadobe-color-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcauberer%2Fadobe-color-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcauberer%2Fadobe-color-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcauberer%2Fadobe-color-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcauberer","download_url":"https://codeload.github.com/marcauberer/adobe-color-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcauberer%2Fadobe-color-tool/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263271464,"owners_count":23440393,"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":["aco","adobe","android","ase","rgb"],"created_at":"2024-11-07T03:35:25.763Z","updated_at":"2025-07-03T06:01:57.478Z","avatar_url":"https://github.com/marcauberer.png","language":"Kotlin","funding_links":["https://github.com/sponsors/marcauberer","https://www.paypal.me/marcauberer"],"categories":[],"sub_categories":[],"readme":"# Adobe Color Tool Library for Android\n[![Maven Central](https://img.shields.io/maven-central/v/com.chillibits/adobecolortool.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22com.chillibits%22%20AND%20a:%22adobecolortool%22)\n![Android CI](https://github.com/marcauberer/adobe-color-tool/workflows/Android%20CI/badge.svg)\n[![API](https://img.shields.io/badge/API-19%2B-red.svg?style=flat)](https://android-arsenal.com/api?level=19)\n[![Article on Medium](https://aleen42.github.io/badges/src/medium.svg)](https://medium.com/p/d29e43fde8eb)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n\nAdobe Color Tool is a library for transforming lists of colors to binary strings / byte arrays in Adobe ACO / ASE format.\n\n## Try it\nIf you want to test the library, please visit the sample app on [Google Play](https://play.google.com/store/apps/details?id=com.chillibits.adobecolorsample)!\n\n## Screenshots (Android 11)\n\u003cimg src=\"https://github.com/marcauberer/adobe-color-tool/raw/main/media/screenshots/screen1.png\" width=\"205\" title=\"Screenshot 1\"\u003e \u003cimg src=\"https://github.com/marcauberer/adobe-color-tool/raw/main/media/screenshots/screen2.png\" width=\"205\" title=\"Screenshot 2\"\u003e \u003cimg src=\"https://github.com/marcauberer/adobe-color-tool/raw/main/media/screenshots/screen3.png\" width=\"205\" title=\"Screenshot 3\"\u003e \u003cimg src=\"https://github.com/marcauberer/adobe-color-tool/raw/main/media/screenshots/screen4.png\" width=\"205\" title=\"Screenshot 4\"\u003e\n\n## Usage\nThe first step for using this library is, to add it to the dependency section in your project:\n\nAdd dependencies to build.gradle file on module level (e.g. app/build.gradle):\n```gradle\nimplementation 'com.chillibits:adobecolortool:1.0.4'\n```\nAlso you have to declare a file provider in your manifest, which should look similar to this one:\n```xml\n\u003capplication\u003e\n    \u003c!-- ... --\u003e\n    \u003cprovider\n        android:name=\"androidx.core.content.FileProvider\"\n        android:authorities=\"com.chillibits.adobecolorsample\"\n        android:exported=\"false\"\n        android:grantUriPermissions=\"true\"\u003e\n        \u003cmeta-data\n            android:name=\"android.support.FILE_PROVIDER_PATHS\"\n            android:resource=\"@xml/file_paths\" /\u003e\n    \u003c/provider\u003e\n\u003c/application\u003e\n```\nRemember to replace `com.chillibits.adobecolorsample` with your package name.\n\nFurthermore, please create  the following file in your `res/xml/file_paths.xml` directory to specify the file path rules of the file provider:\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cpaths\u003e\n    \u003cfiles-path path=\"/\" name=\"allfiles\" /\u003e\n\u003c/paths\u003e\n```\n\n## Export colors\nThe colors have to be provided as variable of the type `List\u003cAdobeColor\u003e`. \u003cbr\u003e\nThis list of colors can then be exported in ACO format like this:\n```kotlin\nval colors = listOf(\n    AdobeColor(Color.rgb(173, 13, 52), \"ad0d34\"),\n    AdobeColor(Color.rgb(199, 122, 49), \"c77a31\"),\n    AdobeColor(Color.rgb(241, 15, 107), \"f10f6b\")\n)\nAdobeColorTool(this).exportColorListAsACO(colors)\n```\n*Note: Before you call the `exportColorListAsACO` function, you have to request the `WRITE_EXTERNAL_STORAGE` permission. Otherwise, the app crashes with an error.*\n\nAnd in the ASE format like this:\n```kotlin\nAdobeColorTool(this).exportColorListAsASE(colors)\n```\nBoth methods can also be called with a second parameter of type `String` to define a name for your color palette. This name will be set as file name for the respective output file and will also be applied to be the ASE group name.\n\n## Import colors\nYou can call the `importColorList` method to bring up a dialog for picking a single ACO or ASE file.\n```kotlin\nAdobeColorTool(this).importColorList(this, object: AdobeColorTool.AdobeImportListener {\n    override fun onComplete(colors: Map\u003cString, List\u003cAdobeColor\u003e\u003e) {\n        /* Your code */\n    }\n\n    override fun onCancel() {\n        /* Your code */\n    }\n})\n```\nThe selected file will automatically be analyzed, whether it is a ACO or ASE file and you get back an object of type `Map\u003cString, List\u003cAdobeColor\u003e\u003e` in the `onComplete` callback method.\nThe map will contain key value pairs, which represents all imported color groups. The key is the group name and the value is a list of type `AdobeColor` with the actual color values.\nAn import of the ACO format will result in a single color group with the name `ACO Import`, containing all color values.\n\n## More in-depth technical information\nThe following remarks are based on the following data:\n- Palette name: `AdobeColorTool`\n- Colors:\n  - Name: `ad0d34`, Color: `#AD0D34 (RGB: 173, 13, 52)`\n  - Name: `c77a31`, Color: `#C77A31 (RGB: 199, 122, 49)`\n  - Name: `f10f6b`, Color: `#F10F6B (RGB: 241, 15, 107)`\n\n### Structure of the ACO color format\nThis is the resulting ACO file in byte-wise hex encoding, using the example data from above:\n```\n[ 0x00 0x01 0x00 0x03 0x00 0x00 0xAD 0xAD 0x0D 0x0D 0x34 0x34 0x00 0x00 0x00 0x00\n  0xC7 0xC7 0x7A 0x7A 0x31 0x31 0x00 0x00 0x00 0x00 0xF1 0xF1 0x0F 0x0F 0x6B 0x6B\n  0x00 0x00 0x00 0x02 0x00 0x03 0x00 0x00 0xAD 0xAD 0x0D 0x0D 0x34 0x34 0x00 0x00\n  0x00 0x00 0x00 0x07 0x00 0x61 0x00 0x64 0x00 0x30 0x00 0x64 0x00 0x33 0x00 0x34\n  0x00 0x00 0x00 0x00 0xC7 0xC7 0x7A 0x7A 0x31 0x31 0x00 0x00 0x00 0x00 0x00 0x07\n  0x00 0x63 0x00 0x37 0x00 0x37 0x00 0x61 0x00 0x33 0x00 0x31 0x00 0x00 0x00 0x00\n  0xF1 0xF1 0x0F 0x0F 0x6B 0x6B 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x66 0x00 0x31\n  0x00 0x30 0x00 0x66 0x00 0x36 0x00 0x62 0x00 0x00 ]\n```\n\nThis binary data can be split up like this:\n![ACO format byte visualization](https://github.com/marcauberer/adobe-color-tool/raw/main/media/aco_structure.png)\n\n\n**More information / Sources:**\n- [http://www.nomodes.com/aco.html](http://www.nomodes.com/aco.html)\n- [https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577411_pgfId-1055819](https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577411_pgfId-1055819)\n\n### Structure of the ASE color format\nThis is the resulting ASE file in byte-wise hex encoding, using the example data from above:\n```\n[ 0x41 0x53 0x45 0x46 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x05 0xC0 0x01 0x00 0x00\n  0x00 0x16 0x00 0x0A 0x00 0x49 0x00 0x6D 0x00 0x61 0x00 0x67 0x00 0x69 0x00 0x6E\n  0x00 0x61 0x00 0x72 0x00 0x79 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x22 0x00 0x07\n  0x00 0x61 0x00 0x64 0x00 0x30 0x00 0x64 0x00 0x33 0x00 0x34 0x00 0x00 0x52 0x47\n  0x42 0x20 0x3F 0x2D 0xAD 0xAE 0x3D 0x50 0xD0 0xD1 0x3E 0x50 0xD0 0xD1 0x00 0x02\n  0x00 0x01 0x00 0x00 0x00 0x22 0x00 0x07 0x00 0x63 0x00 0x37 0x00 0x37 0x00 0x61\n  0x00 0x33 0x00 0x31 0x00 0x00 0x52 0x47 0x42 0x20 0x3F 0x47 0xC7 0xC8 0x3E 0xF4\n  0xF4 0xF5 0x3E 0x44 0xC4 0xC5 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x22 0x00 0x07\n  0x00 0x66 0x00 0x31 0x00 0x30 0x00 0x66 0x00 0x36 0x00 0x62 0x00 0x00 0x52 0x47\n  0x42 0x20 0x3F 0x71 0xF1 0xF2 0x3D 0x70 0xF0 0xF1 0x3E 0xD6 0xD6 0xD7 0x00 0x02\n  0xC0 0x02 0x00 0x00 0x00 0x00 ]\n```\n\nThis binary data can be split up like this:\n![ASE format byte visualization](https://github.com/marcauberer/adobe-color-tool/raw/main/media/ase_structure.png)\n\n**More information / Sources:**\n- [https://www.cyotek.com/blog/reading-adobe-swatch-exchange-ase-files-using-csharp](https://www.cyotek.com/blog/reading-adobe-swatch-exchange-ase-files-using-csharp)\n- [https://www.cyotek.com/blog/writing-adobe-swatch-exchange-ase-files-using-csharp](https://www.cyotek.com/blog/writing-adobe-swatch-exchange-ase-files-using-csharp)\n- [http://www.selapa.net/swatches/colors/fileformats.php#adobe_ase](http://www.selapa.net/swatches/colors/fileformats.php#adobe_ase)\n\n## Supported languages\nHere are the currently supported languages for this library.\n\n-   English\n-   German\n-   French\n\nNew translations are highly appreciated. If you want to translate the lib, please open a pr.\n\n## Contribute to the project\nIf you want to contribute to this project, please feel free to send us a pull request.\n\n## Credits\nThanks to all contributors and translators!\n\n© Marc Auberer 2020-2022\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcauberer%2Fadobe-color-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcauberer%2Fadobe-color-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcauberer%2Fadobe-color-tool/lists"}