{"id":13428126,"url":"https://github.com/SumiMakito/AwesomeQRCode","last_synced_at":"2025-03-16T01:32:04.401Z","repository":{"id":38417918,"uuid":"89555035","full_name":"sumimakito/AwesomeQRCode","owner":"sumimakito","description":"An awesome QR code generator for Android.","archived":false,"fork":false,"pushed_at":"2023-12-02T14:39:24.000Z","size":14764,"stargazers_count":1871,"open_issues_count":19,"forks_count":261,"subscribers_count":56,"default_branch":"master","last_synced_at":"2024-05-19T19:55:12.790Z","etag":null,"topics":["qr-code","qr-generator","qrcode","qrcode-generator"],"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/sumimakito.png","metadata":{"files":{"readme":"README-zh_CN.md","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}},"created_at":"2017-04-27T04:18:21.000Z","updated_at":"2024-05-17T09:07:31.000Z","dependencies_parsed_at":"2024-01-11T00:06:14.906Z","dependency_job_id":null,"html_url":"https://github.com/sumimakito/AwesomeQRCode","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumimakito%2FAwesomeQRCode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumimakito%2FAwesomeQRCode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumimakito%2FAwesomeQRCode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumimakito%2FAwesomeQRCode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sumimakito","download_url":"https://codeload.github.com/sumimakito/AwesomeQRCode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221631866,"owners_count":16855019,"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":["qr-code","qr-generator","qrcode","qrcode-generator"],"created_at":"2024-07-31T01:00:46.817Z","updated_at":"2024-10-27T05:30:45.362Z","avatar_url":"https://github.com/sumimakito.png","language":"Kotlin","funding_links":["https://www.paypal.me/makito"],"categories":["Libraries","AwesomeQRCode: Designed for Android"],"sub_categories":["protectors","Android"],"readme":"\u003e 这篇文档中的内容已经过时，请暂以英文文档的内容为准，谢谢。\n\n\u003cimg alt=\"Special, thus awesome.\" src=\"art/banner2.jpg\" style=\"max-width: 600px;\"\u003e\n\n\n\n[![](https://jitpack.io/v/SumiMakito/AwesomeQRCode.svg)](https://jitpack.io/#SumiMakito/AwesomeQRCode)\n[![release](https://img.shields.io/github/release/SumiMakito/AwesomeQRCode.svg)](https://github.com/SumiMakito/AwesomeQRCode/releases/latest)\n[![license](https://img.shields.io/github/license/SumiMakito/AwesomeQRCode.svg)](https://github.com/SumiMakito/AwesomeQRCode/blob/master/LICENSE)\n![](https://img.shields.io/badge/made%20with-%3C3-orange.svg)\n\nAwesomeQRCode - 一个优雅的\u003cdel\u003e（不起眼的）\u003c/del\u003e QR 二维码生成器\n\n\u003e [Swithc to English Version?](README.md)\n\n## 好耶！ 演示应用！\n\n\u003ca href=\"https://play.google.com/store/apps/details?id=com.github.sumimakito.awesomeqrsample\" target=\"_blank\"\u003e\u003cimg src=\"art/play_store_badge.png\" alt=\"Google Play Store\" width=\"200\"\u003e\u003c/a\u003e\n\n## 样例\n\n\u003e 拿起你的手机扫描下面的二维码试试吧！\n\n样例 1 | 样例 2 | 样例 3\n------------ | ------------- | -------------\n\u003cimg src=\"art/awesome-qr-1.png\" width=\"400\"\u003e | \u003cimg src=\"art/awesome-qr-2.png\" width=\"400\"\u003e | \u003cimg src=\"art/awesome-qr-3.png\" width=\"400\"\u003e\n\n使用圆点做数据点 | 二值化处理 | 带有 Logo\n------------ | ------------- | -------------\n\u003cimg src=\"art/awesome-qr-4.png\" width=\"400\"\u003e | \u003cimg src=\"art/awesome-qr-5.png\" width=\"400\"\u003e | \u003cimg src=\"art/awesome-qr-6.png\" width=\"400\"\u003e\n\n## 引用\n\n\u003e \u003cdel\u003e万事开头难, 补全就好啦!\u003c/del\u003e\n\n在项目根目录下的 build.gradle 中补充以下内容，以添加依赖项：\n\n```\nallprojects {\n\trepositories {\n\t\t...\n\t\tmaven { url 'https://jitpack.io' }\n\t}\n}\n```\n\n在应用模块层级下的 build.gradle 中补充以下内容：\n\n```\ndependencies {\n        compile 'com.github.SumiMakito:AwesomeQRCode:1.0.6'\n}\n```\n\n## 快速上手\n\n### 1. \"人家只想要 Bitmap 嘛\"\n\n\u003e \u003cdel\u003e原来乃只想要 Bitmap 撒... 满足你!!\u003c/del\u003e\n\n这种情况下，二维码将同步（synchronously）生成，这有可能阻塞 UI 线程，引起应用无响应（ANR）问题。因此建议在非 UI 线程中使用。\n\n```java\nnew Thread() {\n  @Override\n  public void run() {\n   super.run();\n   Bitmap qrCode = new AwesomeQRCode.Renderer()\n    .contents(\"Makito loves Kafuu Chino.\")\n    .size(800).margin(20)\n    .render();\n  }.start();\n```\n\n### 2. 异步生成二维码并在 ImageView 中显示\n\n```java\nnew AwesomeQRCode.Renderer()\n .contents(\"Makito loves Kafuu Chino.\")\n .size(800).margin(20)\n .renderAsync(new AwesomeQRCode.Callback() {\n  @Override\n  public void onRendered(AwesomeQRCode.Renderer renderer, final Bitmap bitmap) {\n   runOnUiThread(new Runnable() {\n    @Override\n    public void run() {\n     // 提示: 这里使用 runOnUiThread(...) 来规避从非 UI 线程操作 UI 控件时产生的问题。\n     imageView.setImageBitmap(bitmap);\n    }\n   });\n  }\n\n  @Override\n  public void onError(AwesomeQRCode.Renderer renderer, Exception e) {\n   e.printStackTrace();\n  }\n });\n```\n\n## 渲染流程\n\n```\nBitmap bitmap = new AwesomeQRCode.Renderer() ...\n```\n\n### 基本\n\n#### .contents(String)\n\n*必需*\u003cbr\u003e\n欲编码的内容。\u003cbr\u003e\n默认为 *null*。\n\n#### .size(int)\n\n*必需*\u003cbr\u003e\n尺寸，长宽一致，包含外边距。\u003cbr\u003e\n单位是 *px*。\n默认为 *800*。\n\n#### .margin(int)\n\n二维码图像的外边距。\u003cbr\u003e\n单位是 *px*。\u003cbr\u003e\n默认为 *20*。\n\n#### .dataDotScale(float)\n\n数据点缩小比例。\u003cbr\u003e\n默认为 *0.3f*。\n\n#### .roundedDataDots(boolean)\n\n若为 true，数据区域将以圆点绘制。\u003cbr\u003e\n默认为 *false*。\n\n#### .whiteMargin(boolean)\n\n若设为 true，背景图外将绘制白色边框。\u003cbr\u003e\n默认为 *true*。\n\n### 后处理\n\n#### .binarize(boolean)\n\n若为 true，图像将被二值化处理。\u003cbr\u003e\n默认为 *false*。\n\n#### .binarizeThreshold(int)\n\n二值化处理的阈值。\u003cbr\u003e\n默认为 *128*。\n\n### 颜色\n\n#### .autoColor(boolean)\n\n若为 true，背景图（或 GIF 的每一帧）中的主要颜色将作为非空白区域的颜色。\u003cbr\u003e\n默认为 *true*。\n\n#### .colorDark(int)\n\n非空白区域的颜色。\u003cbr\u003e\n默认为 *Color.BLACK*。\n\n#### .colorLight(int)\n\n空白区域的颜色。\u003cbr\u003e\n默认为 *Color.WHITE*。\n\n### Background\n\n#### .background(Bitmap)\n\n欲嵌入的背景图，设为 null 以禁用。\u003cbr\u003e\n默认为 *null*。\n\n#### .backgroundGif(File)\n\n*必须是 GIF 类型图片，否则将出错。*\u003cbr\u003e\n欲嵌入的 GIF 背景图，设为 null 以禁用。\u003cbr\u003e\n默认为 *null*。\n\n#### .backgroundGifCropRect(RectF)\n\n裁切 GIF 所使用的矩形区域。\u003cbr\u003e\n默认为 *null*。\n\n#### .saveTo(File)\n\n*设置 backgroundGif 时必须指定。*\u003cbr\u003e\n生成 GIF QR 二维码的输出文件。\u003cbr\u003e\n默认为 *null*。\n\n### Logo\n\n#### .logo(Bitmap)\n\n欲嵌入至二维码中心的 Logo，设为 null 以禁用。\u003cbr\u003e\n默认为 *null*。\n\n#### .logoMargin(int)\n\nLogo 周围的空白边框，设为 0 以禁用。\u003cbr\u003e\n单位是 *px*。\u003cbr\u003e\n默认为 *10*。\n\n#### .logoCornerRadius(int)\n\nLogo 及其边框的圆角半径，设为 0 以禁用。\u003cbr\u003e\n单位是 *px*。\u003cbr\u003e\n默认为 *8*。\n\n#### .logoScale(float)\n\n用于计算 Logo 大小的比例，过大可能会导致解码问题。\u003cbr\u003e\n默认为 *0.2f*。\n\n```\n... .render(); // 得到 Bitmap\n```\n\n### 更新日志\n\n#### 1.1.1 版本\n\n- 修复了上一版本中生成的 QR 二维码图块间出现空白间隙的问题\n\n####  1.1.0 版本\n\n- 加入 GIF 支持\n- 修复既有问题\n\n#### 1.0.6 版本\n\n- 修复 divide by zero 错误\n\n#### 1.0.5 版本\n\n- 使用 AwesomeQRCode 的方式变的更优雅\n\n#### 1.0.4 版本\n\n- 可以在二维码中选择嵌入 Logo\n- 演示应用更新\n\n#### 1.0.3 版本\n\n- 在二维码中的 Hints 中加入 CHARACTER_SET =\u003e UTF-8 \n- 修复 [#7](https://github.com/SumiMakito/AwesomeQRCode/issues/7) 中提到的编码问题\n\n#### 1.0.2 版本\n\n- 加入使用圆点绘制二维码数据点的选项\n\n#### 1.0.1 版本\n\n- 加入背景二值化的支持\n\n#### 1.0.0 版本\n\n- 初次发布\n\n## 相关项目\n\n### Swift 下的 EFQRCode \n\nAwesomeQRCode 受 [由 EyreFree 创造的 EFQRCode](https://github.com/EyreFree/EFQRCode) 所启发而生，它是一个轻量级的、用来生成和识别二维码的纯 Swift 库，可根据输入的水印图和图标产生艺术二维码，基于 CoreImage 进行开发。受 qrcode 启发。EFQRCode 为你提供了一种更好的在你的 App 中操作二维码的方式。\n\n### 可在网页使用的 JavaScript 版: Awesome-qr.js\n\n详情请至 [Awesome-qr.js](https://github.com/SumiMakito/Awesome-qr.js)\n\n### \u003cdel\u003e强大的 Kotlin （复刻）版: AwesomeQRCode-Kotlin\u003c/del\u003e \n\n更新较慢，不推荐使用。\n\n详情请至 [AwesomeQRCode-Kotlin](https://github.com/SumiMakito/AwesomeQRCode-Kotlin)\n\n## 捐赠\n\n可以请我喝一杯卡布奇诺吗？\n\nPayPal | 支付宝\n----|----\n[PayPal](https://www.paypal.me/makito) | [支付宝](https://qr.alipay.com/a6x02021re1jk4ftcymlw79)\n\n## 版权信息与授权许可\n\n\u003cimg alt=\"Apache-2.0 license\" src=\"https://lucene.apache.org/images/mantle-power.png\" width=\"128\"\u003e\n\nAwesomeQRCode is available under the Apache-2.0 license. See the LICENSE file for more info.   \nCopyright \u0026copy; 2017-2018 Makito.\n\n## 排他性发行协议\n\n包含、引用、修改、再分发或使用本项目，即代表您已阅读并同意本排他性发行协议中的条款。\n\n**当再发行此开源软件时，此协议需与 APACHE 2.0 许可一同提供。**\n\n您**可以**：\n\n- 在项目中使用 AwesomeQRCode（商业与非商业项目皆可）。\n- 按需要修改 AwesomeQRCode 的代码。\n- 按照本排他性发行协议以及 APACHE 2.0 许可再发行修改后的代码。\n\n您**不可以**：\n\n- 使用 AwesomeQRCode 作为您应用的**主要**或**唯一**功能。\n- 将 AwesomeQRCode 的**部分**或**全部**内容作为可销售商品。\n- 制作 AwesomeQRCode 的演示应用，并提交至商店（包括但不限于 Google Play Store）。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSumiMakito%2FAwesomeQRCode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSumiMakito%2FAwesomeQRCode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSumiMakito%2FAwesomeQRCode/lists"}