二维码在很多场合使用,比如扫码支付,扫码打开链接,扫码加好友等等。
这里介绍一个库,使用这个库,可以简单地生成二维码。并介绍如何使用这个库,动态生成二维码。
使用go生成二维码图片
可以使用go语言,实现任意内容的二维码生成。并保存为文件。
接下来,我们就开始了。show you my code:
package main
import qrcode "github.com/skip2/go-qrcode"
func main() {
qrcode.WriteFile("https://www.wafunny.com", qrcode.Medium, 256, "qrcode.png")
}
运行结果:
这里,使用本博客域名,并保存为qrcode.png 以文件作为二维码的载体。
使用go 动态生成二维码
现在介绍,结合http 库,动态生成qrcode 并返回。而无需保存成图片
可以使用Encode(content string, level RecoveryLevel, size int) ([]byte, error) 函数生成png 格式的字节码。
这里使用qrcode.New 创建qrcode 结构体,然后使用PNG 函数生成字节码。为了以后可扩展性。
package main
import (
"fmt"
qrcode "github.com/skip2/go-qrcode"
"log"
"net/http"
"time"
)
func Qrcode(w http.ResponseWriter, req *http.Request) {
var err error
defer func() {
if err != nil {
w.WriteHeader(500)
return
}
}()
q, err := qrcode.New(fmt.Sprintf("https://www.wafunny.com?t=%d", time.Now().Unix()), qrcode.Medium)
if err != nil {
return
}
png, err := q.PNG(256)
if err != nil {
return
}
w.Header().Set("Content-Type", "image/png")
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(png)))
w.Write(png)
}
func main() {
http.HandleFunc("/qrcode", Qrcode)
log.Fatal(http.ListenAndServe(":8008", nil))
}
执行后,访问 http://localhost:8008/qrcode 就可以看到二维码了。 并且注意,每次刷新都不一样,因为我再url后面加了个时间戳:)
如果需要改变前景以及背景的颜色,可以设置
// User settable drawing options.
ForegroundColor color.Color
BackgroundColor color.Color
贴图操作
贴图可以使用 Bitmap() [][]bool 函数,取出二维码各点的值。并自行画出二维码。
总结
二维码应用多多,通过服务器端生成,主要还是为了动态生成。如果只是简单的url编码,完全可以由客户端,或js 自行生成。