花式二维码大赏-快来秀出你的专属二维码吧

前言

最近看到了 掘金创意开发大赛, 我脑子里当场就想出来题材了, 二维码!

二维码可以说是我们生活中最常用的了, 收付款, 扫码登陆, 信息登记.... 特别是这三年疫情, 去哪不得扫个健康宝, 我都快看吐了, 那么为什么我们不来秀一秀自己的创意, 整一些花式的二维码呢? 也算是爱护眼睛了(避免审美疲劳);

展示

二话不说, 先上一手效果图

实现

哈哈, 看了上面的展示图, 大家是不是也想赶紧秀出自己的二维码了呢; 赶快动手操作起来吧, 实现起来很简单!

环境需求:

python3

依赖包:

pip install amzqr

项目Git地址

ide使用

简单的玩只需要修改我下面备注的参数就可以了, 想看全部参数作用请看 github.com/x-hw/amazin…

import os
from amzqr import amzqr


if __name__ == '__main__':
    words = "https://juejin.cn/pins"

    version, level, qr_name = amzqr.run(
        words=words,  # 二维码的内容
        version=1,
        level='H',
        picture="./zombie.png",  # 需要镶入二维码的图片
        colorized=False,  # 是否上色 False(黑白) True(彩色)
        contrast=1.0,
        brightness=1.0,
        save_name="zombie_qr.png",  # 图片保存文件名
        save_dir=os.getcwd()  # 图片保存路径
    )

命令行使用

# summary
amzqr Words
      [-v {1,2,3,...,40}]
      [-l {L,M,Q,H}]
      [-n output-filename]
      [-d output-directory]
      [-p picture_file]
      [-c]
      [-con contrast]
      [-bri brightness]

特别注意

由于这个包不支持中文, 所以如果想要生成中文内容的二维码需要做一点小小的修改

  1. 加入如下函数, 将 words作为参数传进去转一下就好
def utf16to8(input_txt: str) -> str:
    out = []
    for idx in range(len(input_txt)):
        ch = ord(input_txt[idx])
        if 0x0001 <= ch <= 0x007f:
            out.append(input_txt[idx])
        elif ch > 0x07ff:
            out.append(chr(0xE0 | (ch >> 12 & 0x0F)))
            out.append(chr(0x80 | (ch >> 6 & 0x3F)))
            out.append(chr(0x80 | (ch >> 0 & 0x3F)))
        else:
            out.append(chr(0xC0 | (ch >> 6) & 0x1f))
            out.append(chr(0x80 | (ch >> 0) & 0x3f))

    return ''.join(out)
    
words = utf16to8("每当我看见花瓣脱离花蕊慢慢枯萎")
  1. 使用ide进入run方法的源码将判断支持字符的方法注掉

  1. 完事啦!

原理思考

实现的话需要理解二维码生成的原理, 然后通过算法找到非内容覆盖的区域, 再对图片进行像素替换;

大家感兴趣的话可以看看这个实现research.swtch.com/qr/draw/; 它可以展示出二维码图片中的所有的可控像素, 以及随机/抖动/只展示数据占用的像素区域, 很牛逼!

最后

期待一下各位掘友的精彩表演, 希望大家可以在评论区留下自己的花式二维码!

我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!

Supongo que te gusta

Origin juejin.im/post/7121982315688886308
Recomendado
Clasificación