Shadow
GO语言实现二维码解码
01/25
go语言实现二维码解码
直接上代码
package main
import (
"fmt"
"github.com/tuotoo/qrcode"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
func main() {
qrDecode()
}
func qrDecode(){
var fileName string
fmt.Println("\n========二维码解析【支持网络二维码】========\n")
fmt.Println("文件为绝对路径【D:\\a.png】")
fmt.Printf("【按Q建为退出程序】请输入文件地址:")
fmt.Scanln(&fileName)
if strings.ToLower(fileName) == "q" {
os.Exit(200)
}
//处理网络二维码图片
if (strings.Index(fileName, "http://")) == 0 || strings.Index(fileName, "https://") == 0 {
fmt.Println("===网络二维码===")
res, err := http.Get(fileName)
if err != nil {
log.Println("网络请求失败:", err.Error())
qrDecode()
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Println("读取内容失败:", err.Error())
qrDecode()
}
var tmpQrImg string = "tmp.jpg"
file, err := os.Create(tmpQrImg)
if err != nil {
log.Println("创建文件失败:", err.Error())
qrDecode()
}
var (
_ int
errFile error
)
_, errFile = file.Write(body)
if errFile != nil {
log.Println("创建文件失败:", errFile.Error())
qrDecode()
}
//重新命名
fileName = tmpQrImg
//删除文件
defer func() {
err := os.Remove(tmpQrImg)
if err != nil {
log.Fatalln("删除网络二维码失败:", err.Error())
}
}()
}
//Stat返回一个描述name指定的文件对象的FileInfo
_, err := os.Stat(fileName)
//判断文件是否存在
if os.IsNotExist(err) {
log.Println("文件不存在!", err.Error())
qrDecode()
}
file, err := os.Open(fileName)
if err != nil {
log.Println("打开文件失败:", err.Error())
qrDecode()
}
defer file.Close()
qrmatrix, err := qrcode.Decode(file)
if err != nil {
log.Println("解码失败:", err.Error())
qrDecode()
} else {
fmt.Println("解码结果为:")
fmt.Println(qrmatrix.Content)
qrDecode()
}
}
识别率不是特别高,不过也能用。
版权属于:
Dcr163的博客
本文链接:
https://www.dcr163.cn/613.html(转载时请注明本文出处及文章链接)