图书馆小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
5.6 KiB

1 month ago
  1. # w-qrcode 二维码生成器
  2. 高性能二维码生成组件,纯 JavaScript 实现,无外部依赖。
  3. ## 特性
  4. - 纯 JavaScript 实现,无需任何外部依赖
  5. - 支持 Vue2 和 Vue3
  6. - 支持全平台:H5、App(Vue/Nvue)、微信/支付宝/百度/字节跳动/QQ 等小程序
  7. - 支持自定义前景色、背景色
  8. - 支持添加 Logo 图片
  9. - 支持多种纠错级别(L/M/Q/H)
  10. - 支持保存到相册
  11. - 支持导出为图片
  12. ## 安装
  13. `w-qrcode` 目录复制到项目的 `uni_modules` 目录下即可。
  14. ## 基本使用
  15. ```vue
  16. <template>
  17. <w-qrcode value="https://example.com" />
  18. </template>
  19. ```
  20. ## 完整示例
  21. ```vue
  22. <template>
  23. <view class="container">
  24. <!-- 基础用法 -->
  25. <w-qrcode
  26. value="https://example.com"
  27. :size="200"
  28. />
  29. <!-- 自定义颜色 -->
  30. <w-qrcode
  31. value="https://example.com"
  32. :size="200"
  33. foreground="#1989fa"
  34. background="#f5f5f5"
  35. />
  36. <!-- 带 Logo -->
  37. <w-qrcode
  38. ref="qrcodeRef"
  39. value="https://example.com"
  40. :size="200"
  41. logo="/static/logo.png"
  42. :logo-size="50"
  43. :logo-radius="8"
  44. error-correction-level="H"
  45. @generated="onGenerated"
  46. @longpress="onLongpress"
  47. />
  48. <button @click="saveToAlbum">保存到相册</button>
  49. </view>
  50. </template>
  51. <script>
  52. export default {
  53. methods: {
  54. onGenerated(info) {
  55. console.log('二维码生成成功:', info);
  56. // { version: 2, size: 25, errorCorrectionLevel: 'H' }
  57. },
  58. onLongpress(e) {
  59. console.log('长按事件');
  60. },
  61. saveToAlbum() {
  62. this.$refs.qrcodeRef.saveToAlbum()
  63. .then(res => {
  64. console.log('保存成功', res);
  65. })
  66. .catch(err => {
  67. console.error('保存失败', err);
  68. });
  69. }
  70. }
  71. };
  72. </script>
  73. ```
  74. ## Vue3 组合式 API 示例
  75. ```vue
  76. <template>
  77. <w-qrcode
  78. ref="qrcodeRef"
  79. :value="qrValue"
  80. :size="200"
  81. />
  82. </template>
  83. <script setup>
  84. import { ref } from 'vue';
  85. const qrcodeRef = ref(null);
  86. const qrValue = ref('https://example.com');
  87. const saveToAlbum = () => {
  88. qrcodeRef.value.saveToAlbum();
  89. };
  90. </script>
  91. ```
  92. ## Props 属性
  93. | 属性名 | 类型 | 默认值 | 说明 |
  94. |--------|------|--------|------|
  95. | value | String | '' | 要编码的文本内容 |
  96. | size | Number/String | 200 | 二维码尺寸(单位:px) |
  97. | foreground | String | '#000000' | 前景色(二维码颜色) |
  98. | background | String | '#FFFFFF' | 背景色 |
  99. | errorCorrectionLevel | String | 'M' | 纠错级别,可选值:L/M/Q/H |
  100. | margin | Number/String | 2 | 二维码边距(单位:模块) |
  101. | logo | String | '' | Logo 图片路径 |
  102. | logoSize | Number/String | 50 | Logo 尺寸(单位:px) |
  103. | logoMargin | Number/String | 5 | Logo 外边距(单位:px) |
  104. | logoRadius | Number/String | 8 | Logo 圆角(单位:px) |
  105. | logoBackground | String | '#FFFFFF' | Logo 背景色 |
  106. | canvas2d | Boolean | true | 是否使用 Canvas 2D(仅小程序有效) |
  107. ## 纠错级别说明
  108. | 级别 | 纠错能力 | 说明 |
  109. |------|----------|------|
  110. | L | 约 7% | 数据恢复能力最低 |
  111. | M | 约 15% | 默认级别,平衡 |
  112. | Q | 约 25% | 较高的数据恢复能力 |
  113. | H | 约 30% | 最高级别,适合添加 Logo |
  114. > 注意:如果需要在二维码中添加 Logo,建议使用 `H` 级别,以保证扫描成功率。
  115. ## Events 事件
  116. | 事件名 | 说明 | 回调参数 |
  117. |--------|------|----------|
  118. | generated | 二维码生成成功时触发 | { version, size, errorCorrectionLevel } |
  119. | error | 生成失败时触发 | Error 对象 |
  120. | longpress | 长按二维码时触发 | Event 对象 |
  121. ## Methods 方法
  122. 通过 ref 获取组件实例后调用:
  123. | 方法名 | 说明 | 参数 | 返回值 |
  124. |--------|------|------|--------|
  125. | saveToAlbum | 保存到相册 | - | Promise |
  126. | toTempFilePath | 获取临时文件路径 | options | Promise<{tempFilePath}> |
  127. | toDataURL | 获取 Base64(仅 H5) | type, quality | Promise<string> |
  128. | generate | 重新生成二维码 | - | - |
  129. ### toTempFilePath 参数
  130. ```javascript
  131. this.$refs.qrcodeRef.toTempFilePath({
  132. fileType: 'png', // 'jpg' | 'png'
  133. quality: 1, // 0-1,jpg 时有效
  134. destWidth: 300, // 输出图片宽度
  135. destHeight: 300 // 输出图片高度
  136. });
  137. ```
  138. ## 直接使用 JS SDK
  139. 如果只需要生成二维码数据,可以直接使用 JS SDK:
  140. ```javascript
  141. import QRCode from '@/uni_modules/w-qrcode/js_sdk/qrcode.js';
  142. // 生成二维码数据
  143. const result = QRCode.generate('https://example.com', {
  144. errorCorrectionLevel: 'M' // L/M/Q/H
  145. });
  146. console.log(result);
  147. // {
  148. // version: 2, // 版本号 1-40
  149. // size: 25, // 矩阵尺寸
  150. // modules: [[...], ...], // 二维码矩阵,1表示黑色,0表示白色
  151. // errorCorrectionLevel: 'M'
  152. // }
  153. ```
  154. ## 平台差异
  155. | 平台 | 渲染方式 | 说明 |
  156. |------|----------|------|
  157. | H5 | Canvas | 完全支持 |
  158. | App-Vue | Canvas | 完全支持 |
  159. | App-Nvue | View 布局 | 使用 Fallback 渲染 |
  160. | 微信小程序 | Canvas 2D | 推荐使用 Canvas 2D |
  161. | 其他小程序 | Canvas | 使用旧版 Canvas API |
  162. ## 常见问题
  163. ### 1. 二维码扫描不出来?
  164. - 检查内容是否正确
  165. - 增加纠错级别(使用 'H')
  166. - 减小 Logo 尺寸(不超过二维码的 30%)
  167. - 增加二维码尺寸
  168. ### 2. 保存到相册失败?
  169. - 小程序需要用户授权
  170. - App 需要配置相册权限
  171. - 检查图片路径是否正确
  172. ### 3. Logo 不显示?
  173. - 确保图片路径正确
  174. - 本地图片使用绝对路径
  175. - 网络图片需要在小程序后台配置域名白名单
  176. ## 更新日志
  177. ### 1.0.0
  178. - 初始版本发布
  179. - 支持基础二维码生成
  180. - 支持自定义样式
  181. - 支持 Logo 图片
  182. - 支持多平台