【问题标题】:How to clone a QRCode image with given content text?如何克隆具有给定内容文本的 QRCode 图像?
【发布时间】:2018-08-12 20:12:53
【问题描述】:

我有一个 QRCode 图像及其内容:P01 V0N S0000000

我尝试使用node-qrcode 使用不同的matchPattern 重新生成此图像:

const $qr = require('qrcode')
const text = 'P01 V0N S0000000'

for (let i = 0; i < 8; i++) {
  let path = `P01V0NS0000000-${i}.png`
  const opt = {
    maskPattern: i
  }
  $qr.toFile(path, text, opt, function (err) {
    if (err) {
      console.log(err)
    } else {
      console.log(opt)
    }
  })
}

但没有一个生成的图像与目标具有相同的模式:

我也尝试过使用不同的version 参数,但所有版本>1 都会生成非常密集的模式。

这个 QRCode 图像是用某种salt 生成的,难以复制吗?

【问题讨论】:

    标签: node.js qr-code


    【解决方案1】:

    无需尝试其他版本,因为您的第一张图片显然是version 1 (21x21)。相反,它可能是格式编码(例如,考虑到字符集,应用程序可能使用 alphanumeric,而您的原始可能是 byte

    根据您提供的链接,我建议阅读 this section 关于模式并尝试使用:

    mode: 'alphanumeric'
    

    或与:

    mode: 'byte'
    

    查看其中是否有任何与您的原始代码匹配。

    另一个可以改变二维码外观的参数是error correction level。我猜node-qrcode 默认使用给定版本 1 的最高级别,而您的原始版本可能使用较低的。

    有了这些参数,你就有了一组8(maskPattern)*2(mode)*4(errorCorrectionLevel) = 64 可能的二维码,里面有相同的数据,所以也许其中一个会匹配!


    编辑

    由于您的数据长度为 16 个字符,因此范围缩小,因为纠错级别只能具有以下值 (source):

    • L,M,Qalphanumeric模式
    • Lbyte 模式

    因此,您有(3+1)*8 = 32 可能的结果图像。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2012-12-04
      • 2013-08-27
      • 2012-02-10
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多