唠唠闲话

二维码样式有非常大的发挥空间,本文根据样式的生成方式,将其分为三类:

  1. 简单的图片操作
  2. 矢量图操作
  3. 二维码像素绘图

尽管不一定能覆盖到所有创意,但列举的这三类是个人觉得可以做到,但限于精力短期不一定能完成的目标。所以如果你也觉得这些设计很有意思,欢迎加入 QRCoders.jl 的开发中来。如果有问题或想法,欢迎通过 issue,中英文论坛,slack 等方式进行交流。

二维码参考样式:
yangshi

本文着重点介绍图像二维码的编写原理。

简单的图片操作

这部分主要涉及图片的替换,填色和叠加等,举几个例子。

  1. 在二维码中间填充图片

    • 策略:切片赋值
    • 提升:设置中心图片大小,避免破坏二维码
  2. 彩色绘图

    • 彩色像素:用 RGB 值代替黑白像素
    • 渐变绘图:先画彩色的背景图,然后将二维码的黑块当成透明块,填充上去
  3. 散点图

    • 策略1:UnicodePlots.jl 中的散点图工具
    • 策略2:张量积 kron 执行的内容类似于点替换为矩阵,设置目标矩阵即可

矢量图操作

以吃豆人为例

绘制过程:

  • 绘制通常的二维码
  • 随机取部分连续的黑块连接起来,作为墙壁
  • 随机取部分 2x2 的黑块替换为吃豆人
  • 将其他黑块替换为豆子

Plot process

  • Draw the usual QR code
  • Randomly select some continuous black pixels to connect them as walls
  • Randomly select some 2x2 black pixels to replace with Pacman
  • Replace other black pixels with beans

二维码像素绘图