Go生成二维码

题外话

周六了,休息,那不得抓紧享受人生,菲奥娜,快给少爷我按按腿,娜莎,不要愣着,给少爷我舞上一曲,行,真不错,通知一下后厨,把昨天运来的北极深海贝处理一下,晚上我要吃……
又是乏味的一天…… 人生就是这么简简单单
话说今天这大太阳,真不错

在这里插入图片描述
废话不多说,上货
在这里插入图片描述

二维码

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码。 堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成;矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”, 用“空”表示二进制“0”,“点”和“空”的排列组成代码。

举个例子
在这里插入图片描述
这是几组矩阵式二维码,百度百科的图
在这里插入图片描述

使用Go语言生成二维码图片

使用Go语言编程时,生成任意内容的二维码是非常方便的,可以使用 go-qrcode 这个库快速生成二维码。大家可以从 github 上(https://github.com/skip2/go-qrcode)下载并使用这个库。要是下载不下来的挂个代理就可。
上代码

package main
import "github.com/skip2/go-qrcode"
func main() {
    qrcode.WriteFile("https://blog.csdn.net/qq_42828912?spm=3001.5343&type=blog",qrcode.Medium,256,"./golang_qrcode.png")
}

这样我们运行代码的时候,就在当前目录下,生成一张 256*256 的二维码,我生成的是自己主页的二维码。
在这里插入图片描述
然后来说一下代码中用到的这个方法
func WriteFile(content string, level RecoveryLevel, size int, filename string) error
WriteFile 函数的原型定义如上,它有几个参数,大概意思如下:
content 表示要生成二维码的内容,可以是任意字符串;
level 表示二维码的容错级别,取值有 Low、Medium、High、Highest;
size 表示生成图片的 width 和 height,像素单位;
filename 表示生成的文件名路径;
RecoveryLevel 类型其实是个 int,

它的定义和常量如下:

type RecoveryLevel int
const (
    // Level L: 7% error recovery.
    Low RecoveryLevel = iota
    // Level M: 15% error recovery. Good default choice.
    Medium
    // Level Q: 25% error recovery.
    High
    // Level H: 30% error recovery.
    Highest
)

RecoveryLevel 越高,二维码的容错能力越好

生成二维码图片字节

有时候我们不想直接生成一个 PNG 文件存储,我们想对 PNG 图片做一些处理,比如缩放了,旋转了,或者网络传输了等,基于此,我们可以使用 Encode 函数,生成一个 PNG 图片的字节流,这样我们就可以进行各种处理了
还是go-qrcode这个库的方法
func Encode(content string, level RecoveryLevel, size int) ([]byte, error)
用法和 WriteFile 函数差不多,只不过返回的是一个 []byte 字节数组,这样我们就可以对这个字节数组进行处理了。

自定义二维码

光是生成当然不行,我们得想法让它好看点
除了以上两种快捷方式,go-qrcode 库还为我们提供了对二维码的自定义方式,比如我们可以自定义二维码的前景色和背景色等。qrcode.New 函数可以返回一个 *QRCode,我们可以对 *QRCode 设置,实现对二维码的自定义。
比如我们设置背景色为绿色,前景色为黑色的二维码

package main
import(
    "github.com/skip2/go-qrcode"
    "image/color"
    "log"
)
func main() {
    qr,err:=qrcode.New("https://blog.csdn.net/qq_42828912?spm=3001.5343&type=blog",qrcode.Medium)
    if err != nil {
        log.Fatal(err)
    } else {
        qr.BackgroundColor = color.RGBA{50,205,50,255}
        qr.ForegroundColor = color.BLACK
        qr.WriteFile(256,"./golang_qrcode.png")
    }
}

在这里插入图片描述
要想生活过的去,还得是这一点绿啊

你以为结束了

小问题:我不信能有比我这个二维码好看的……

上期问题:如何不使用递归完成斐波那契数列的实现?
上期答案:动态规划或二维矩阵

在这里插入图片描述
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值