{"id":15175208,"url":"https://github.com/sshtools/icon-generator","last_synced_at":"2025-10-26T10:31:19.053Z","repository":{"id":57727242,"uuid":"45975451","full_name":"sshtools/icon-generator","owner":"sshtools","description":"A simple library for generating Java2D (Swing/AWT) and JavaFX icons in Java, with SWT support in an add-on.","archived":false,"fork":false,"pushed_at":"2024-04-05T18:42:01.000Z","size":340,"stargazers_count":20,"open_issues_count":0,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-31T18:14:59.670Z","etag":null,"topics":["awt","fontawesome","generator","icons","java","javafx","swing","swt"],"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/sshtools.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-11T10:36:40.000Z","updated_at":"2024-12-07T14:18:19.000Z","dependencies_parsed_at":"2022-09-26T21:51:19.937Z","dependency_job_id":null,"html_url":"https://github.com/sshtools/icon-generator","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sshtools%2Ficon-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sshtools%2Ficon-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sshtools%2Ficon-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sshtools%2Ficon-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sshtools","download_url":"https://codeload.github.com/sshtools/icon-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238310324,"owners_count":19450840,"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":["awt","fontawesome","generator","icons","java","javafx","swing","swt"],"created_at":"2024-09-27T12:04:48.704Z","updated_at":"2025-10-26T10:31:13.739Z","avatar_url":"https://github.com/sshtools.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# icon-generator\nA simple library for generating Java2D (Swing/AWT), JavaFX and SWT icons in Java. \n\n![](src/web/images/sample.png)\n\nicon-generator generates icons images automatically from text or icons with customisable shapes, colour\nand styles. \n\n## Configuring your project\n\nThe library is available in Maven Central, so configure your project according to the\nbuild system you use. \n\nAs from version 1.2, *icon-generator* requires Java 9 or higher (due to modularity requirements). If you \nwant to use this library with Java 8 or earlier, then you will have to continue to use version \n**1.0.3**. I may consider future 1.0.x releases if anyone needs them.\n\nChoose the appropriate module for the toolkit you wish to use.\nYou may include multiple toolkits if you wish :-\n\n### Swing\n\n```xml\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003ecom.sshtools\u003c/groupId\u003e\n\t\t\u003cartifactId\u003eicon-generator-swing\u003c/artifactId\u003e\n\t\t\u003cversion\u003e1.3.0\u003c/version\u003e\n\t\u003c/dependency\u003e\n```\n\n### JavaFX\n\n```xml\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003ecom.sshtools\u003c/groupId\u003e\n\t\t\u003cartifactId\u003eicon-generator-javafx\u003c/artifactId\u003e\n\t\t\u003cversion\u003e1.3.0\u003c/version\u003e\n\t\u003c/dependency\u003e\n```\n\n### SWT\n\n```xml\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003ecom.sshtools\u003c/groupId\u003e\n\t\t\u003cartifactId\u003eicon-generator-swt\u003c/artifactId\u003e\n\t\t\u003cversion\u003e1.3.0\u003c/version\u003e\n\t\u003c/dependency\u003e\n```\n\n## Configuring the Icon\n\nFor this, you use [IconBuilder](src/main/java/com/sshtools/icongenerator/IconBuilder.java). \n\n### Create The Builder \n\n```java\nIconBuilder builder = new IconBuilder();\n```\n\n### Sizes\n\n```java\nbuilder.width(64);\nbuilder.height(64);\n```\n\n### Text Colours\n\n```java\n\nbuilder.textColor(0xff0000); // red\n\n// or\n\nbuild.textColor(IconBuilder.AUTO_TEXT_COLOR);\n\n// or\n\nbuild.textColor(IconBuilder.RANDOM_TEXT_COLOR);\n\n// or\n\nbuild.textColor(IconBuilder.AUTO_TEXT_COLOR_WHITE);\n\n// or\n\nbuild.textColor(IconBuilder.AUTO_TEXT_COLOR_BLACK);\n\n// and the background colour\n\nbuilder.color(0x00ff00); // green\n\n// or\n\nbuilder.color(IconBuilder.AUTO_COLOR); // based on text / icon\n\n// or\n\nbuilder.color(IconBuilder.RANDOM_COLOR); \n```\n\n\n### Shape\n\n```java\n\nbuilder.autoShape();\n\n// or\n\nbuilder.rect(); // rectangle\n\n// or \n\nbuilder.round(); // round\n// or \n\nbuilder.rectRound(8); // rounded rectangle with 8px radius\n```\n\n### Text And Fonts\n\n```java\n\nbuilder.text(\"AB\");\n\n// or a full word and a processing option\n\nbuilder.text(\"Actually Brilliant\");\nbuilder.textCase(TextCase.UPPER);\nbuilder.textContext(TextContext.INITIALS);\n\n// Font\nbuilder.font(\"Monospaced\");\nbuilder.fontSize(12); \nbuilder.bold(true);\n\n```\n\n### Font Awesome Icon\n\n```java\nbuilder.icon(AwesomeIcon.ADDRESS_BOOK);\n\n// or\n\nbuilder.awesomeIconMode(AwesomeIconMode.AUTO_TEXT);\n\n// or\n\nbuilder.awesomeIconMode(AwesomeIconMode.AUTO_MATCH);\n \n```\n\n## Generate The Icon\n\nNow you can use the IconBuilder.build() for the toolkit you are using. You must\nprovide the class of the concrete icon to create, depending on the toolkit. The \nfollowing are supported :-\n\n\n| Class                    | Module | Description |\n| --- | --- | --- |\n| java.awt.BufferedImage | icon-generator-swing | A Swing buffered image. |\n| java.awt.Image | icon-generator-swing | A Swing buffered image. |\n| javax.swing.Icon | icon-generator-swing | A Swing icon. |\n| org.eclipse.swt.graphics.Image | icon-generator-swt | An SWT image. |\n| javafx.scene.canvas.Canvas | icon-generator-javafx | A JavaFX canvas. |\n\n### Generate an ImageIcon for use in Swing\n\n```\nJLabel l = new JLabel(\"A label with an icon\");\nl.setIcon(builder.build(Icon.class));\n```\n\n### Generate a Java2D BufferedImage for use in a servlet\n\nSomething like this :- \n\n```java\nresponse.setContentType(\"image/jpeg\");\ntry(OutputStream out = response.getOutputStream()) {\n\tImageIO.write(builder.build(BufferedImage.class), \"jpg\", out);\n}\n\n```\n\n## Extending\n\nNew generators may be added by implementing [IconGenerator](src/main/java/com/sshtools/icongenerator/IconGenerator.java).\nYou can then either add the generator to each IconBuilder you create :-\n\n```java\nbuilder.generator(MyIcon.class, new IconGenerator\u003cMyIcon\u003e() {\n\t@Override\n\tpublic Class\u003cMyIcon\u003e getIconClass() {\n\t\treturn MyIcon.class;\n\t}\n\t\n\t@Override\n\tpublic boolean isValid() {\n\t/* This can be used to have the generator ignored if some pre-condition is not met,\n\t   such as a supporting library not being available */\n\t\treturn true;\n\t}\n\n\t@Override\n\tpublic MyIcon generate(IconBuilder builder, Object... args) {\n\t\tMyIcon myIcon = ..\n\t\t\n\t\t/** Do stuff to generate a MyIcon given the configuration provided by IconBuilder */ \n\t\n\t\n\t\treturn myIcon;\n\t}\n\t\n});\n```\n\n.. or create a concrete class and add it as a service. Create a classpath resource named *META-INF/services/com.sshtools.icongenerator.IconGenerator* (e.g. src/main/resources/META-INF/services/com.sshtools.icongenerator.IconGenerator) and place the full class name of your IconGenerator implementation inside it. \n\n```\ncom.mystuff.icongen.MyIconGenerator\n```\n\nThis will then be automatically loaded whenever you create a new IconBuilder instance, and you can use the *build()*\nmethod as normal :-\n\n```java\nIconBuilder builder = new IconBuilder();\n\n// do stuff to create builder ...\n\nMyIcon myIcon = builder.build(MyIcon.class);\n```\n\nThe *build()* method also can accept additional arguments which are passed on to the generator, if your generator\nneeds additional configuration.\n\n```java\n\nMyIcon myIcon = builder.build(MyIcon.class, flipX, flipY);\n```\n\n.. and then in the generator access the arguments :-\n\n```java\n@Override\n\tpublic MyIcon generate(IconBuilder builder, Object... args) {\n\t\tboolean flipX = (Boolean)args[0];\n\t\tboolean flipY = (Boolean)args[1];\n\t\tMyIcon myIcon = ..\n\t\t\n\t\t/** Do stuff to generate a MyIcon given the configuration provided by IconBuilder */ \n\t\n\t\treturn myIcon;\n\t}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsshtools%2Ficon-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsshtools%2Ficon-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsshtools%2Ficon-generator/lists"}