[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7570":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":17,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":18,"lastSyncTime":32,"discoverSource":33},7570,"AwesomeQRCode","sumimakito\u002FAwesomeQRCode","sumimakito","An awesome QR code generator for Android.","",null,"Kotlin",1912,267,52,17,0,1,2,55.98,"Apache License 2.0",false,"master",true,[25,26,27,28],"qr-code","qr-generator","qrcode","qrcode-generator","2026-06-12 04:00:34","\u003Cimg alt=\"Special, thus awesome.\" src=\"art\u002Fbanner_v3.png\">\n\n[![](https:\u002F\u002Fjitpack.io\u002Fv\u002FSumiMakito\u002FAwesomeQRCode.svg)](https:\u002F\u002Fjitpack.io\u002F#SumiMakito\u002FAwesomeQRCode)\n[![release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002FSumiMakito\u002FAwesomeQRCode.svg)](https:\u002F\u002Fgithub.com\u002FSumiMakito\u002FAwesomeQRCode\u002Freleases\u002Flatest)\n[![license](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FSumiMakito\u002FAwesomeQRCode.svg)](https:\u002F\u002Fgithub.com\u002FSumiMakito\u002FAwesomeQRCode\u002Fblob\u002Fmaster\u002FLICENSE)\n![](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fmade%20with-cappuccino-orange.svg)\n\nAwesome QR code - An awesome QR code generator for Android.\n\n## Yay! Available on Google Play!\n\n*With the Awesome QR app, you can play with these options like a master!*\n\n\u003Ca href=\"https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=com.github.sumimakito.awesomeqrsample\" target=\"_blank\">\u003Cimg src=\"art\u002Fplay_store_badge.png\" alt=\"Google Play Store\" width=\"200\">\u003C\u002Fa>\n\n## Showcase\n\nNo Logo|With Logo|Animated GIF\n------------ | ------------- | -------------\n\u003Cimg src=\"art\u002Fno_logo.png\" width=\"400\"> | \u003Cimg src=\"art\u002Fwith_logo.png\" width=\"400\"> | \u003Cimg src=\"art\u002Fgif.gif\" width=\"400\"> \n\n> Listing only several styles for demonstration. \n>\n> Find out more styles and options in the Awesome QR app!\n\n## Installation\n\nTo add the dependency into your project, edit your project-level *build.gradle* first.\n\n```\nallprojects {\n    repositories {\n        ...\n        maven { url 'https:\u002F\u002Fjitpack.io' }\n    }\n}\n```\n\nThen, edit your *build.gradle* on module level.\n\n> Remember to replace `\u003CLATEST_VERSION_NAME>` with the latest version name showed on the JitPack badge.\n\n```\ndependencies {\n    implementation 'com.github.SumiMakito:AwesomeQRCode:\u003CLATEST_VERSION_NAME>'\n}\n```\n\n## Usage\n\n### 1. Say hello to *RenderOption*.\n\nLike a recipe, *RenderOption* stores a set of options and it will tell the renderer \"how to stylize the QR code for you.\"\n\n```kotlin\n\u002F\u002F Kotlin\n\nval renderOption = RenderOption()\nrenderOption.content = \"Special, thus awesome.\" \u002F\u002F content to encode\nrenderOption.size = 800 \u002F\u002F size of the final QR code image\nrenderOption.borderWidth = 20 \u002F\u002F width of the empty space around the QR code \nrenderOption.ecl = ErrorCorrectionLevel.M \u002F\u002F (optional) specify an error correction level\nrenderOption.patternScale = 0.35f \u002F\u002F (optional) specify a scale for patterns\nrenderOption.roundedPatterns = true \u002F\u002F (optional) if true, blocks will be drawn as dots instead\nrenderOption.clearBorder = true \u002F\u002F if set to true, the background will NOT be drawn on the border area\nrenderOption.color = color \u002F\u002F set a color palette for the QR code\nrenderOption.background = background \u002F\u002F set a background, keep reading to find more about it\nrenderOption.logo = logo \u002F\u002F set a logo, keep reading to find more about it\n```\n\n```java\n\u002F\u002F Java\n\nRenderOption renderOption = new RenderOption();\nrenderOption.setContent(\"Special, thus awesome.\"); \u002F\u002F content to encode\nrenderOption.setSize(800); \u002F\u002F size of the final QR code image\nrenderOption.setBorderWidth(20); \u002F\u002F width of the empty space around the QR code\nrenderOption.setEcl(ErrorCorrectionLevel.M); \u002F\u002F (optional) specify an error correction level\nrenderOption.setPatternScale(0.35f); \u002F\u002F (optional) specify a scale for patterns\nrenderOption.setRoundedPatterns(true); \u002F\u002F (optional) if true, blocks will be drawn as dots instead\nrenderOption.setClearBorder(true); \u002F\u002F if set to true, the background will NOT be drawn on the border area\nrenderOption.setColor(color); \u002F\u002F set a color palette for the QR code\nrenderOption.setBackground(background); \u002F\u002F set a background, keep reading to find more about it\nrenderOption.setLogo(logo); \u002F\u002F set a logo, keep reading to find more about it\n```\n\n> But, wait. What is a *background*? Don't worry and keep reading. :)\n\n### 2. Grab a background.\u003Csup>Optional\u003C\u002Fsup>\n\nAwesome QR code natively provides three types of backgrounds. Each background should extend the abstract *Background* class.\n\n```kotlin\n\u002F\u002F Kotlin\n\n\u002F\u002F A still background (a still image as the background)\nval background = StillBackground()\nbackground.bitmap = backgroundBitmap \u002F\u002F assign a bitmap as the background\nbackground.clippingRect = Rect(0, 0, 200, 200) \u002F\u002F crop the background before applying\nbackground.alpha = 0.7f \u002F\u002F alpha of the background to be drawn\n\n\u002F\u002F A blend background (to draw a QR code onto an area of a still image)\nval background = BlendBackground()\nbackground.bitmap = backgroundBitmap\nbackground.clippingRect = Rect(0, 0, 200, 200)\nbackground.alpha = 0.7f\nbackground.borderRadius = 10 \u002F\u002F radius for blending corners\n\n\u002F\u002F A gif background (animated)\nval background = GifBackground()\nbackground.inputFile = gifFile \u002F\u002F assign a file object of a gif image to this field\nbackground.outputFile = File(pictureStorage, \"output.gif\") \u002F\u002F IMPORTANT: the output image will be saved to this file object\nbackground.clippingRect = Rect(0, 0, 200, 200)\nbackground.alpha = 0.7f\n```\n\n```java\n\u002F\u002F Java\n\n\u002F\u002F A still background (a still image as the background)\nStillBackground background = new StillBackground(); \nbackground.setBitmap(backgroundBitmap); \u002F\u002F assign a bitmap as the background\nbackground.setClippingRect(new Rect(0, 0, 200, 200));\u002F\u002F crop the background before \nbackground.setAlpha(0.7f); \u002F\u002F alpha of the background to be drawn\n\n\u002F\u002F A blend background (to draw a QR code onto an area of a still image)\nBlendBackground background = new BlendBackground();\nbackground.setBitmap(backgroundBitmap);\nbackground.setClippingRect(new Rect(0, 0, 200, 200));\nbackground.setAlpha(0.7f);\nbackground.setBorderRadius(10); \u002F\u002F radius for blending corners\n\n\u002F\u002F A gif background (animated)\nGifBackground background = new GifBackground();\nbackground.setInputFile(gifFile); \u002F\u002F assign a file object of a gif image to this field\nbackground.setOutputFile(new File(pictureStorage, \"output.gif\")); \u002F\u002F IMPORTANT: the output image will be saved to this file object\nbackground.setClippingRect(new Rect(0, 0, 200, 200));\nbackground.setAlpha(0.7f);\n```\n\n### 3. Seek for a rainbow.\u003Csup>Optional\u003C\u002Fsup>\n\n> This step is optional since Awesome QR code will use black and white as the default color set.\n\n```kotlin\n\u002F\u002F Kotlin\n\nval color = Color()\ncolor.light = 0xFFFFFFFF.toInt() \u002F\u002F for blank spaces\ncolor.dark = 0xFFFF8C8C.toInt() \u002F\u002F for non-blank spaces\ncolor.background = 0xFFFFFFFF.toInt() \u002F\u002F for the background (will be overriden by background images, if set)\ncolor.auto = false \u002F\u002F set to true to automatically pick out colors from the background image (will only work if background image is present)\n```\n\n```java\n\u002F\u002F Java\n\nColor color = new Color(); \ncolor.setLight(0xFFFFFFFF); \u002F\u002F for blank spaces\ncolor.setDark(0xFFFF8C8C); \u002F\u002F for non-blank spaces\ncolor.setBackground(0xFFFFFFFF); \u002F\u002F for the background (will be overriden by background images, if set)\ncolor.setAuto(false); \u002F\u002F set to true to automatically pick out colors from the background image (will only work if background image is present)\n```\n\n### 4. Hey. I want a Logo.\u003Csup>Optional\u003C\u002Fsup>\n\n> This step is optional since the logo is not required by default.\n\n```kotlin\n\u002F\u002F Kotlin\n\nval logo = Logo()\nlogo.bitmap = logoBitmap\nlogo.borderRadius = 10 \u002F\u002F radius for logo's corners\nlogo.borderWidth = 10 \u002F\u002F width of the border to be added around the logo\nlogo.scale = 0.3f \u002F\u002F scale for the logo in the QR code\nlogo.clippingRect = Rect(0, 0, 200, 200) \u002F\u002F crop the logo image before applying it to the QR code\n```\n\n```java\n\u002F\u002F Java\n\nLogo logo = new Logo();\nlogo.setBitmap(logoBitmap);\nlogo.setBorderRadius(10); \u002F\u002F radius for logo's corners\nlogo.setBorderWidth(10); \u002F\u002F width of the border to be added around the logo\nlogo.setScale(0.3f); \u002F\u002F scale for the logo in the QR code\nlogo.setClippingRect(new Rect(0, 0, 200, 200)); \u002F\u002F crop the logo image before applying it to the QR code\n```\n\n### 5. Render!\n\nMeet the magical renderer.\n\n##### If you prefer the asynchronous way...\n\n```kotlin\n\u002F\u002F Kotlin\n\nval result = AwesomeQrRenderer.renderAsync(renderOption, { result ->\n    if (result.bitmap != null) {\n        \u002F\u002F play with the bitmap\n    } else if (result.type == RenderResult.OutputType.GIF) {\n        \u002F\u002F If your Background is a GifBackground, the image \n        \u002F\u002F will be saved to the output file set in GifBackground\n        \u002F\u002F instead of being returned here. As a result, the \n        \u002F\u002F result.bitmap will be null.\n    } else {\n        \u002F\u002F Oops, something gone wrong.\n    }\n}, { \n    exception -> exception.printStackTrace() \n    \u002F\u002F Oops, something gone wrong.\n})\n```\n\n##### Or synchronously...\n\n```kotlin\n\u002F\u002F Kotlin\n\ntry {\n    val result = AwesomeQrRenderer.render(renderOption)\n    if (result.bitmap != null) {\n        \u002F\u002F play with the bitmap\n    } else if (result.type == RenderResult.OutputType.GIF) {\n        \u002F\u002F If your Background is a GifBackground, the image \n        \u002F\u002F will be saved to the output file set in GifBackground\n        \u002F\u002F instead of being returned here. As a result, the \n        \u002F\u002F result.bitmap will be null.\n    } else {\n        \u002F\u002F Oops, something gone wrong.\n    }\n} catch (e: Exception) {\n    e.printStackTrace()\n    \u002F\u002F Oops, something gone wrong.\n}\n```\n\n## Changelog\n\n#### Version 1.2.0\n\n- Translated into Kotlin.\n- Changed to the RenderOption-Renderer structure.\n\n#### Version 1.1.1\n\n- Fixed a bug that would previously cause the gaps between blocks in position\u002Falignment patterns.\n\n#### Version 1.1.0\n\n+ Added the support for GIF backgrounds.\n+ Fixed some issues found in the previous version.\n\n#### Version 1.0.6\n\n- Fixed a \"divide by zero\" error mentioned in [#20](https:\u002F\u002Fgithub.com\u002FSumiMakito\u002FAwesomeQRCode\u002Fissues\u002F20).\n\n#### Version 1.0.5\n- The way to use Awesome QR code is more elegant.\n\n#### Version 1.0.4\n\n- New feature: Embedding a logo image in the QR code.\n- Sample\u002FDemo application updated.\n\n#### Version 1.0.3\n\n- Added CHARACTER_SET => UTF-8 to QR code's hints before encoding.\n- Fixed an encoding issue mentioned in [#7](https:\u002F\u002Fgithub.com\u002FSumiMakito\u002FAwesomeQRCode\u002Fissues\u002F7).\n\n#### Version 1.0.2\n\n- Added an optional parameter which enables the data dots to appear as filled circles.\n\n#### Version 1.0.1\n\n- Now background images can be binarized as you like.\n\n#### Version 1.0.0\n\n- Initial release.\n\n## Alternatives\n\n#### Awesome-qr.js written in JavaScript\n\nRedirect to [Awesome-qr.js](https:\u002F\u002Fgithub.com\u002FSumiMakito\u002FAwesome-qr.js)\n\n#### EFQRCode written in Swift\n\nEFQRCode is a tool to generate QRCode image or recognize QRCode from image, in Swift.\n\nAwesome QR code is inspired by [EFQRCode by EyreFree](https:\u002F\u002Fgithub.com\u002FEyreFree\u002FEFQRCode).\n\nIf your application is in need of generating pretty QR codes in Swift, take a look at EFQRCode. It should help.\n\n## Donation\n\nIf you think Awesome QR code is awesome, would you like to buy me a cup of cappuccino?\n\n- [PayPal](https:\u002F\u002Fwww.paypal.me\u002Fmakito)\n- [Alipay](https:\u002F\u002Fqr.alipay.com\u002Fa6x02021re1jk4ftcymlw79)\n\n## Sponsors\n\nIt is those generous sponsors who supports this project makes the Awesome-qr.js more awesome!\n\nI'd like to express my sincere appreciation to all the generous sponsors.\n\n- [Coxxs](https:\u002F\u002Fcoxxs.me\u002F)\n\n## Special thanks\n\n- [Megabits](https:\u002F\u002Fgithub.com\u002Fmegabitsenmzq) (Banner art work)\n\n## Copyright &amp; License\n\n\u003Cimg alt=\"Apache-2.0 license\" src=\"art\u002Fapache_feather.svg\" width=\"64\">\n\nAwesome QR code is available under the Apache-2.0 license. See the LICENSE file for more info.\n\nCopyright &copy; 2017-2018 Makito.\n\n## Exclusive Distributor Agreement\n\nBy including, importing, modifying, redistributing, or using this library, you acknowledge and agree that you have read and accept the terms of this Exclusive Distributor Agreement.\n\n**WHILE REDISTRIBUTING THIS LIBRARY, THIS AGREEMENT SHALL ALSO BE ATTACHED WITH THE APACHE-2.0 LICENSE.**\n\nYou're **FREE** to:\n\n- Use Awesome QR code in your projects (commercial projects are okay as well).\n\n+ Modify the code according to your needs.\n+ Redistribute the modified code under the Exclusive Distributor Agreement and the Apache-2.0 license.\n\nYou're **FORBIDDEN** to:\n\n+ Make Awesome QR code the **main** or the **only** feature of your applications.\n+ Treat the **whole or part** of Awesome QR code as a paid function. \n+ Make a demo or sample application for Awesome QR code and submit the application to the store (IBNLT Google Play Store, etc.).","AwesomeQRCode 是一个专为 Android 平台设计的优秀二维码生成器。它使用 Kotlin 语言开发，支持自定义二维码的内容、大小、边框宽度、纠错级别以及样式等参数，允许开发者通过 RenderOption 类来灵活设置二维码的外观，包括颜色、背景图片和标志等。此外，该项目还提供了将生成的二维码保存为静态图片或 GIF 动画的功能，极大地丰富了二维码的表现形式。适用于需要在移动应用中集成美观且功能丰富的二维码生成功能的各种场景，如营销活动、产品推广和个人名片等。","2026-06-11 03:13:06","top_language"]