题外话
周六了,休息,那不得抓紧享受人生,菲奥娜,快给少爷我按按腿,娜莎,不要愣着,给少爷我舞上一曲,行,真不错,通知一下后厨,把昨天运来的北极深海贝处理一下,晚上我要吃……
又是乏味的一天…… 人生就是这么简简单单
话说今天这大太阳,真不错
废话不多说,上货
二维码
二维条码/二维码(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")
}
}
要想生活过的去,还得是这一点绿啊
你以为结束了
小问题:我不信能有比我这个二维码好看的……
上期问题:如何不使用递归完成斐波那契数列的实现?
上期答案:动态规划或二维矩阵
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!