{"id":22737949,"url":"https://github.com/simonscholz/qr-code-with-logo","last_synced_at":"2025-07-18T04:37:49.724Z","repository":{"id":198016242,"uuid":"698277784","full_name":"SimonScholz/qr-code-with-logo","owner":"SimonScholz","description":"Create a highly customizable QR code with optional Logo in Kotlin or Java ","archived":false,"fork":false,"pushed_at":"2025-06-25T21:39:08.000Z","size":3250,"stargazers_count":34,"open_issues_count":3,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-06-25T22:34:21.542Z","etag":null,"topics":["awt-graphics","java","kotlin","library","logo","maven-central","qr","qrcode","qrcode-generator","svg"],"latest_commit_sha":null,"homepage":"","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/SimonScholz.png","metadata":{"files":{"readme":"README.adoc","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,"zenodo":null}},"created_at":"2023-09-29T14:52:41.000Z","updated_at":"2025-06-25T21:39:12.000Z","dependencies_parsed_at":"2023-10-16T09:07:09.215Z","dependency_job_id":"c3951401-dab2-46b3-857a-d177e0760f3d","html_url":"https://github.com/SimonScholz/qr-code-with-logo","commit_stats":null,"previous_names":["simonscholz/qr-code-with-logo"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/SimonScholz/qr-code-with-logo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimonScholz%2Fqr-code-with-logo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimonScholz%2Fqr-code-with-logo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimonScholz%2Fqr-code-with-logo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimonScholz%2Fqr-code-with-logo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SimonScholz","download_url":"https://codeload.github.com/SimonScholz/qr-code-with-logo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimonScholz%2Fqr-code-with-logo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265701465,"owners_count":23813751,"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-graphics","java","kotlin","library","logo","maven-central","qr","qrcode","qrcode-generator","svg"],"created_at":"2024-12-10T22:18:45.656Z","updated_at":"2025-07-18T04:37:49.715Z","avatar_url":"https://github.com/SimonScholz.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":":toc:\n\nThis library uses the zxing library, which provides a simple API to create QR codes.\n\n== Creating QR Codes with Kotlin or Java\n\nThe entry point for this library is the `QrCodeFactory`,\nwhich will give you an instance of the `QrCodeApi` to create a QR code as `BufferedImage`.\nThis `BufferedImage` can be configured by passing an instance of `QrCodeConfig` and use for further image processing.\n\nExamples for Java or Kotlin can be found in the https://github.com/SimonScholz/qr-code-with-logo/blob/main/java-sample/src/main/java/io/github/simonscholz/Main.java[`java-sample`] or https://github.com/SimonScholz/qr-code-with-logo/blob/main/kotlin-sample/src/main/kotlin/io/github/simonscholz/Main.kt[`kotlin-sample`] module.\n\nThe qr-code-app project makes it even easier to create QR codes with this library.\n\nimage::./docs/qr-code-app-ui.png[]\n\nJust run the `qr-code-app` project and create your QR code with a nice UI.\n\n[source, bash]\n----\n./gradlew :qr-code-app:run\n----\n\nhttps://www.jbang.dev/documentation/jbang-idea/latest/installation.html[jbang] can also be used to run the application:\n\n[source, bash]\n----\njbang catalog add --name simonscholz https://github.com/SimonScholz/jbang-catalog/blob/main/jbang-catalog.json\n\njbang trust add https://github.com/SimonScholz/qr-code-with-logo/releases/download/\n\njbang qr-code-app@simonscholz\n----\n\nOr download the appropriate distribution from the https://github.com/SimonScholz/qr-code-with-logo/releases[releases section].\n\nMore details about the application can be found https://github.com/SimonScholz/qr-code-with-logo#qr-code-app[here]\n\nThe app you can also generate the code for you, so you can just copy and paste it into your project.\n\n== Quickstart\n\n=== Gradle\n\nGetting a released version:\n\n[source, kotlin]\n----\ndependencies {\n    implementation(\"io.github.simonscholz:qr-code-with-logo:0.4.0\")\n    // Optional if you´d want to create QR code SVG images\n    implementation(\"io.github.simonscholz:qr-code-with-logo-svg:0.4.0\")\n}\n----\n\nUsing the snapshot version:\n\n[source, kotlin]\n----\nrepositories {\n    mavenCentral()\n    maven(\n        url = \"https://s01.oss.sonatype.org/content/repositories/snapshots/\"\n    )\n}\n\ndependencies {\n    implementation(\"io.github.simonscholz:qr-code-with-logo:0.4.0-SNAPSHOT\")\n    // Optional if you´d want to create QR code SVG images\n    implementation(\"io.github.simonscholz:qr-code-with-logo-svg:0.4.0-SNAPSHOT\")\n}\n----\n\n=== Maven\n\n[source, xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.simonscholz\u003c/groupId\u003e\n    \u003cartifactId\u003eqr-code-with-logo\u003c/artifactId\u003e\n    \u003cversion\u003e0.4.0\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Optional if you´d want to create QR code SVG images --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.simonscholz\u003c/groupId\u003e\n    \u003cartifactId\u003eqr-code-with-logo-svg\u003c/artifactId\u003e\n    \u003cversion\u003e0.4.0\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n== kotlin\n\n[source, kotlin]\n----\nimport io.github.simonscholz.qrcode.QrCodeFactory.createQrCodeApi\nimport io.github.simonscholz.qrcode.DEFAULT_IMG_SIZE\nimport io.github.simonscholz.qrcode.QrCodeConfig\nimport java.awt.image.BufferedImage\nimport java.io.File\nimport javax.imageio.ImageIO\n\n// extension function to write a BufferedImage to a file\nfun BufferedImage.toFile(file: File) {\n    ImageIO.write(this, \"png\", file)\n}\n\nval qrCodeApi = createQrCodeApi()\nqrCodeApi.createQrImage(QrCodeConfig(\"https://simonscholz.dev/\", DEFAULT_IMG_SIZE))\n    .toFile(File(\"qr-with-defaults.png\"))\n----\n\nFor more advanced examples, please have a look at the https://github.com/SimonScholz/qr-code-with-logo/blob/main/kotlin-sample/src/main/kotlin/io/github/simonscholz/Main.kt[`kotlin-sample` module].\n\n== java\n\n[source, java]\n----\nimport io.github.simonscholz.qrcode.QrCodeApi;\nimport io.github.simonscholz.qrcode.QrCodeConfig;\nimport io.github.simonscholz.qrcode.QrCodeFactory;\nimport javax.imageio.ImageIO;\nimport java.io.File;\n\nimport static io.github.simonscholz.qrcode.QrCodeConfigKt.DEFAULT_IMG_SIZE;\n\nfinal QrCodeApi qrCodeApi = QrCodeFactory.createQrCodeApi();\nfinal var qrCode = qrCodeApi.createQrImage(new QrCodeConfig(\"https://simonscholz.dev/\", DEFAULT_IMG_SIZE));\nImageIO.write(qrCode, \"png\", new File(\"qr-with-defaults-java.png\"));\n----\n\nFor more advanced examples, please have a look at the https://github.com/SimonScholz/qr-code-with-logo/blob/main/java-sample/src/main/java/io/github/simonscholz/Main.java[`java-sample` module].\n\n== SVG QR codes\n\nThis project has a new module called `qr-code-svg`, which will be available beginning with version 0.4.0.\n\n[source, kotlin]\n----\ndependencies {\n    implementation(\"io.github.simonscholz:qr-code-with-logo-svg:0.4.0\")\n}\n----\n\n[source, xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.simonscholz\u003c/groupId\u003e\n    \u003cartifactId\u003eqr-code-with-logo-svg\u003c/artifactId\u003e\n    \u003cversion\u003e0.4.0\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\nUnder the hood https://xmlgraphics.apache.org/batik/[Apache Batik] is being used to create SVG files.\n\nThe API is pretty similar to what you already know from the regular examples.\nThe only difference is the `QrSvgLogoConfig` class for configuring the logo,\nbecause it adds the opportunity to make use of a SVG image as logo besides using an `java.awt.Image` or base64 encoded image.\n\n=== SVG code examples\n\n==== Java\n\n[source, java]\n----\nimport io.github.simonscholz.qrcode.QrCodeConfig;\nimport io.github.simonscholz.svg.QrCodeSvgFactory;\nimport org.w3c.dom.Document;\n\nimport javax.xml.transform.Transformer;\nimport javax.xml.transform.TransformerException;\nimport javax.xml.transform.TransformerFactory;\nimport javax.xml.transform.dom.DOMSource;\nimport javax.xml.transform.stream.StreamResult;\nimport java.io.File;\n\npublic class SVGSamples {\n    public static void main(final String[] args) throws TransformerException {\n        QrCodeConfig qrCodeConfig = new QrCodeConfig.Builder(\"https://simonscholz.dev/\").build();\n        Document qrCodeDocument = QrCodeSvgFactory.createQrCodeApi().createQrCodeSvg(qrCodeConfig);\n        TransformerFactory transformerFactory = TransformerFactory.newInstance();\n        Transformer transformer = transformerFactory.newTransformer();\n        DOMSource source = new DOMSource(qrCodeDocument);\n        StreamResult result = new StreamResult(new File(\"qr-code.svg\"));\n        transformer.transform(source, result);\n    }\n}\n----\n\n==== Kotlin\n\n[source, kotlin]\n----\nimport io.github.simonscholz.qrcode.QrCodeConfig\nimport io.github.simonscholz.svg.QrCodeSvgFactory\nimport org.w3c.dom.Document\nimport java.io.File\nimport javax.xml.transform.TransformerFactory\nimport javax.xml.transform.dom.DOMSource\nimport javax.xml.transform.stream.StreamResult\n\nfun main() {\n    val svgConfig = QrCodeConfig.Builder(\"https://simonscholz.dev/\").build()\n    val qrCodeSvg = QrCodeSvgFactory.createQrCodeApi().createQrCodeSvg(svgConfig)\n    qrCodeSvg.toFile(File(\"svg-qr-code.svg\"))\n}\n\nfun Document.toFile(fileToSave: File) {\n    val transformerFactory = TransformerFactory.newInstance()\n    val transformer = transformerFactory.newTransformer()\n    val source = DOMSource(this)\n    val result = StreamResult(fileToSave)\n    transformer.transform(source, result)\n}\n----\n\n=== Generate SVG code\n\nThe really neat thing here again is that you can simply launch the qr-code-app application\nand generate respective Java or Kotlin code for SVG image creation.\n\n=== Caveats with logos for the SVG QR code\n\nAs mentioned earlier for SVG images you can use a `org.w3c.dom.Document` besides an `java.awt.Image` or base64 encoded `String`.\nBut all options come with downsides. When using a `org.w3c.dom.Document` svg logo image the shape cannot be adjusted\nand the logo SVG is pasted in the center as is.\nWhereas the java.awt.Image` or base64 encoded `String` remain raster images, which won´t look good when scaling the SVG image,\nwhich is one of the main benefits of using SVG images.\n\n== Example QR codes\n\nAll the examples you can see here are implemented in the `java-sample` and `kotlin-sample` modules.\n\nThe `qr-code-app` project makes it even easier to create QR codes with this library,\nbecause it offers a UI to create QR codes and also offers a UI for the QR code design.\nIt can even generate the code for you, so you can just copy and paste it into your project.\n\n=== Shapes\n\nUsing the defaults only:\n\nimage::./docs/qr-with-defaults.png[]\n\nAdding a center logo:\n\nimage::./docs/qr-with-logo.png[]\n\nAdding a border:\n\nimage::./docs/qr-with-logo-and-border.png[]\n\nAdding radius to positional squares:\n\nimage::./docs/qr-with-logo-and-border-and-p-border-round.png[]\n\nHaving circles as positional \"squares\":\n\nimage::./docs/qr-with-logo-and-border-and-p-border-circle.png[]\n\n=== Colors\n\nAdd some decent red color:\n\nimage::./docs/decent-red-color.png[]\n\nMake it look like a Minecraft Creeper QR code:\n\nimage::./docs/minecraft-creeper-color.png[]\n\nMake the QR code transparent and draw it onto a background image:\n\nimage::./docs/transparent-color.png[]\n\nTo see what's possible with colors, have a look at the rainbow example in the bad examples below.\n\n=== Custom dot shapes\n\nThe library comes with some predefined dot shapes, but you can also create your own dot shapes.\n\nPredefined dot shapes of the library:\n\n- `QrCodeDotShape.SQUARE`\n- `QrCodeDotShape.ROUNDED_SQUARE`\n- `QrCodeDotShape.CIRCLE`\n- `QrCodeDotShape.HEXAGON`\n- `QrCodeDotShape.TRIANGLE`\n- `QrCodeDotShape.HEART`\n- `QrCodeDotShape.HOUSE`\n- `QrCodeDotShape.STAR`\n- `QrCodeDotShape.DIAMOND`\n- `QrCodeDotShape.CROSS`\n- `QrCodeDotShape.SMILEY`\n- `QrCodeDotShape.FLOWER`\n- `QrCodeDotShape.FLOWER_2`\n- `QrCodeDotShape.FLOWER_3`\n- `QrCodeDotShape.EASTER_EGG`\n\nThe app and samples show how to use these predefined dot shapes or create your own dot shapes.\n\nimage::./docs/dots/star.png[]\n\nimage::./docs/dots/heart.png[]\n\nIf you want to see more examples, just run the sample code or the app.\n\nThe following example shows how to use the predefined dot shapes:\n\n[source, kotlin]\n----\nimport io.github.simonscholz.qrcode.QrCodeConfig\nimport io.github.simonscholz.qrcode.QrCodeDotShape\nimport io.github.simonscholz.qrcode.QrCodeFactory\nimport java.awt.Color\nimport java.awt.Graphics2D\nimport java.io.File\nimport java.nio.file.Files\nimport java.nio.file.Paths\nimport javax.imageio.ImageIO\n\nfun main() {\n  val path = Paths.get(System.getProperty(\"user.home\"), \"qr-code-samples\")\n  Files.createDirectories(path)\n  val qrCodeDir = path.toAbsolutePath().toString()\n  val qrCodeApi = QrCodeFactory.createQrCodeApi()\n\n  QrCodeConfig.Builder(\"https://simonscholz.dev/\")\n      .qrCodeDotStyler(QrCodeDotShape.STAR)\n      .qrCodeSize(800)\n      .build()\n      .run {\n          qrCodeApi.createQrCodeImage(this)\n              .toFile(File(qrCodeDir, \"/qr-with-STAR-dots-kotlin.png\"))\n      }\n}\n----\n\nThe following example shows how to create a custom dot shape:\n\n[source, kotlin]\n----\nimport io.github.simonscholz.qrcode.QrCodeConfig\nimport io.github.simonscholz.qrcode.QrCodeDotShape\nimport io.github.simonscholz.qrcode.QrCodeFactory\nimport java.awt.Color\nimport java.awt.Graphics2D\nimport java.io.File\nimport java.nio.file.Files\nimport java.nio.file.Paths\nimport javax.imageio.ImageIO\n\nfun main() {\n  val path = Paths.get(System.getProperty(\"user.home\"), \"qr-code-samples\")\n  Files.createDirectories(path)\n  val qrCodeDir = path.toAbsolutePath().toString()\n  val qrCodeApi = QrCodeFactory.createQrCodeApi()\n  QrCodeConfig.Builder(\"https://simonscholz.dev/\")\n      .qrCodeDotStyler(::drawSmiley)\n      .qrCodeSize(800)\n      .build()\n      .run {\n          qrCodeApi.createQrCodeImage(this)\n              .toFile(File(qrCodeDir, \"/qr-with-SMILEY-dots-kotlin.png\"))\n      }\n\n  private fun drawSmiley(x: Int, y: Int, dotSize: Int, graphics: Graphics2D) {\n      drawDotImage(x, y, dotSize, graphics, \"smiley_fill.png\")\n  }\n\n  private fun drawDotImage(x: Int, y: Int, dotSize: Int, graphics: Graphics2D, image: String) {\n      val resource = Main::class.java.getClassLoader().getResource(image)\n      resource?.let {\n          val imageDot = ImageIO.read(it)\n          graphics.drawImage(imageDot, x, y, dotSize, dotSize, null)\n      }\n  }\n}\n----\n\nBesides just drawing a logo with the `Graphics2D` object, you can also draw whatever you want.\n\nFor more advanced examples and Java usage, please have a look at the `kotlin-sample` or `java-sample` modules.\n\n=== Types\n\nIn order to create certain types of QR codes, you can may want to use the following utils.\n\nPlease see https://github.com/SimonScholz/qr-code-with-logo/blob/main/kotlin-sample/src/main/kotlin/io/github/simonscholz/QrCodeTypesMain.kt[`kotlin-sample` module] or https://github.com/SimonScholz/qr-code-with-logo/blob/main/java-sample/src/main/java/io/github/simonscholz/QrCodeTypesMain.java[`java-sample` module] to use these types and run the samples.\n\n==== Simple types\n\n```java\nString url = SimpleTypes.url(\"https://simonscholz.dev/\");\n\nString geolocation = SimpleTypes.geolocation(53.59659752940634, 10.006589989354053);\n\nString email = SimpleTypes.email(\"simon@example.com\", \"Hello World\", \"This is a test email\");\n\nString phoneNumber = SimpleTypes.phoneNumber(\"+49 176 12345678\");\n\nString sms = SimpleTypes.sms(\"+49 176 12345678\", \"Hello, this is a test SMS\");\n\nString wifi = SimpleTypes.wifi(\"My-Wifi\", \"MyWifiPassword\");\n```\n\nThese String values can be used to create a QR code.\n\n.See simple QR Code type images\n[%collapsible]\n====\nSimple url:\n\nimage::./docs/types/simple-url.png[]\n\nSimple geolocation:\n\nimage::./docs/types/simple-geolocation.png[]\n\nSimple email:\n\nimage::./docs/types/simple-email.png[]\n\nSimple phoneNumber:\n\nimage::./docs/types/simple-phoneNumber.png[]\n\nSimple sms:\n\nimage::./docs/types/simple-sms.png[]\n\nSimple wifi:\n\nimage::./docs/types/simple-wifi.png[]\n====\n\n==== More complex types\n\nVEVENT type:\n\n```java\nLocalDateTime startDateTime = LocalDateTime.now().plusWeeks(2);\nVEvent vevent = new VEvent.Builder(\"QR Codes with Kotlin \u0026 Java\")\n                .location(\"Java User Group Hamburg\")\n                .startDate(startDateTime)\n                .endDate(startDateTime.plusHours(2))\n                .description(\"Let's create QR Codes with Kotlin \u0026 Java\")\n                .build();\nString vEventQrCodeText = vevent.toVEventQrCodeText();\n```\n\nThe `vEventQrCodeText` can then be used to create a QR code.\n\n.See QR Code image\n[%collapsible]\n====\nimage::./docs/types/vevent.png[]\n====\n\nVCARD type:\n\n```java\nVCard vCard = new VCard.Builder(\"Simon Scholz\")\n                .email(\"simon@example.com\")\n                .address(\"Main Street 1\", \"Hamburg\", \"22855\")\n                .organization(\"Self Employed\")\n                .phoneNumber(\"+49 176 12345678\")\n                .website(\"https://simonscholz.dev/\")\n                .build();\nString vCardQrCodeText = vCard.toVCardQrCodeText();\n```\n\nThe `vCardQrCodeText` can then be used to create a QR code.\n\n.See QR Code image\n[%collapsible]\n====\nimage::./docs/types/vCard.png[]\n====\n\n== Base64 encoded qr code image and logo\n\nThe logo image can be added as file or as Base64 encoded string.\n\nThe qr code image can also be returned as Base64 encoded string.\n\nAlso the the qr-code-app application, which can also deal with Base64 encoded strings for the logo and the qr code image.\n\n== Logo scaling\n\nScaling down the logo image in advance will improve the image quality of the logo.\n\nBut compare yourself:\n\nLogo with 500x500px (Qr Code size=300px):\n\nimage::./docs/qr-with-logo-unscaled.png[]\n\nLogo with 60x60px (Qr Code size=300px):\n\nimage::./docs/qr-with-logo-scaled.png[]\n\nNOTE: I chose 60x60px, because the default logo relative size is 0.2, which means 20% of the QR code size, which is 60x60px when having a 300x300px qr code (300*0.2=60).\n\nThe reason for this is the fact that the scaling capabilities of awt are *not* that good.\n\nSo you should either scale the logo manually or use the following beforehand:\n\n- java.awt.Image.getScaledInstance(int width, int height, int hints)\n- https://github.com/rkalla/imgscalr\n- https://github.com/downgoon/marvin\n- https://github.com/coobird/thumbnailator\n\n== Bad examples\n\nNot having enough contrast:\n\nimage::./docs/not-enough-contrast.png[]\n\nThe rainbow QR code to depict what's possible:\n\nimage::./docs/rainbow-color.png[]\n\nThese are bad examples, because the colors are not contrasting enough.\n\nSo please be cautious when changing the colors!\n*Not* having enough contrast may cause that qr code scanners are not capable to read the qr code!\nIf you try to scan the bad exmaple qr codes from above, you will see that it's not working.\n\n== Qr Code App\n\nThe `qr-code-app` project is a simple Swing application, which uses this library to create QR codes.\n\n=== Features\n\n- Create QR codes with a UI\n- Offers a UI for simple QR codes (url, email, phone number, sms, geolocation)\n- Offers a UI for more complex QR codes (vcard, vevent)\n- Offers properties panel for the QR code design (colors, shapes, logo, etc.)\n- Offers a preview panel to see the QR code design\n- Logo can be added as file or base64 encoded string\n- Save the QR code as image\n- Copy the QR code to the clipboard\n- Copy the QR code as Base64 encoded string to the clipboard\n- Save/Export the QR code config/design to a file for later or sharing with others\n- Load/Import a QR code from a config/design file\n- Copy sample code based on current config to the clipboard (Java or Kotlin)\n\nFeel free to ask for new features or create a pull request if you want to add more features.\n\n=== Config of the UI\n\nThe latest config is stored in the operating systems app data directory (~/.config/qr-code-app or C:\\AppData\\qr-code-app) when closing the application.\nOn startup of the application this config is loaded and used to create a QR code.\n\n=== Sharing the config\n\nThe config can be shared with others by saving it via `File \u003e Export Config` or `CTRL+E` shortcut to a file and sending it to others.\nOthers can then load the config via `File \u003e Import Config` or `CTRL+I` shortcut.\nThe good thing is that also the logo image is stored in the config file, so you don't have to send the logo image separately.\nThis is archived by converting the logo image to a Base64 encoded string.\n\n=== Running the app\n\nEither start it from your IDE or use Gradle to run it:\n\n[source, bash]\n----\n./gradlew :qr-code-app:run\n----\n\n=== Downloading the app (without Java)\n\nThe https://github.com/SimonScholz/qr-code-with-logo/releases[releases section] offers distributions for different operating systems,\nwhich consists of a `qr-code-app` and `qr-code-app.bat` file in the `/bin` folder, which can be executed directly.\n(does **not** require Java to be installed on your system)\n\n== Support for other image formats\n\nYou can make use of the following project to also create different image formats: https://github.com/haraldk/TwelveMonkeys\nThis works because image io is highly extensible via SPI implementations.\n\nTherefore you can also pass an `imageFormatName` to the creation of a base64 image:\n\n[source, kotlin]\n----\nval base64QrCodeImage = QrCodeFactory.createQrCodeApi()\n    .createBase64QrCodeImage(\n        qrCodeConfig = qrCodeConfig,\n        imageFormatName = \"png\",\n    )\nprintln(base64QrCodeImage)\n----\n\n== Useful sources\n\n- https://zxing.org/w/decode.jspx[Decoding qr codes using zxing]\n- https://www.qrcode.com/en/about/version.html[QR Code Versions]\n- https://android.googlesource.com/platform/frameworks/opt/vcard/+/ics-mr1/java/com/android/vcard/VCardConstants.java[Android VCardConstants]\n- https://github.com/haraldk/TwelveMonkeys\n- https://simonscholz.dev/tutorials/publish-maven-central-gradle[How I published this library to Maven Central]\n\n== Acknowledgements\n\nThank you so much @lome for providing this awesome code at https://github.com/lome/niceqr,\nwhere I gained a lot of ideas and adopted some parts of the code.\n\n== License\n\nThis library is licensed under the Apache License, Version 2.0.\n\n== Contributing\n\nThank you for considering contributing to this project! Whether it's reporting bugs, suggesting enhancements, or submitting code changes, your contributions are greatly appreciated.\n\nTo get started, please follow these guidelines:\n\n. Fork the repository and clone it to your local machine.\n. Create a new branch for your feature or bug fix.\n. Run `./gradlew installKtlintGitPrePushHook` to ensure that ktlint does not have issues with your code.\n. Make your changes and ensure they adhere to the project's coding standards and guidelines.\n. Test your changes thoroughly.\n. Commit your changes with clear and descriptive messages.\n. Push your branch to your fork of the repository.\n. Submit a pull request, clearly describing the changes you've made.\n\nIf you have any questions or need further assistance, feel free to open an issue or reach out to me.\n\nAgain, thank you for your contributions!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonscholz%2Fqr-code-with-logo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonscholz%2Fqr-code-with-logo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonscholz%2Fqr-code-with-logo/lists"}