go语言web开发系列之二十一:用go-qrcode库生成二维码

article/2025/11/5 16:50:47

一,安装用到的库

1,go-qrcode库的地址

GitHub - skip2/go-qrcode: :sparkles: QR Code encoder (Go)

2,安装go-qrcode库

liuhongdi@ku:~$ go get -u github.com/skip2/go-qrcode/...

3,resize库的地址(在二维码中间放icon时太大时需要缩放)

GitHub - nfnt/resize: Pure golang image resizing

4,安装resize库:

liuhongdi@ku:~$ go get -u github.com/nfnt/resize

说明:刘宏缔的go森林是一个专注golang的博客,
网站:https://blog.imgtouch.com
原文: go语言web开发系列之二十一:用go-qrcode库生成二维码 – 架构森林

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,演示项目的相关信息

1,地址:

GitHub - liuhongdi/digv21: 用go-qrcode库生成二维码

2,功能说明:演示了生成不带icon的二维码和带icon的二维码

3,项目结构:如图:

三,go代码说明

1,controller/codeController.go

package controllerimport ("fmt""github.com/gin-gonic/gin""github.com/skip2/go-qrcode""github.com/nfnt/resize""image""image/draw""image/gif""image/jpeg""image/png""os""path/filepath""strings"
)type CodeController struct{}func NewCodeController() CodeController {return CodeController{}
}
//生成一个二维码
func (g *CodeController) GetOne(c *gin.Context) {//保存pathpngpath:="/data/liuhongdi/digv21/static/images/q.png"//生成二维码url:="http://www.baidu.com/"qrCode, err := qrcode.New(url, qrcode.Highest)if err != nil {fmt.Println(err)return}qrCode.DisableBorder = true//保存成文件qrCode.WriteFile(256,pngpath)//显示二维码pngurl:= "/static/images/q.png"html:="<img src='"+pngurl+"' />"c.Header("Content-Type", "text/html; charset=utf-8")c.String(200, html)return
}//生成一个中间带icon的二维码
func (g *CodeController) GetIcon(c *gin.Context) {var (bgImg  image.Imageoffset  image.PointavatarFile *os.FileavatarImg image.Image)//png图片的本地保存路径pngpath:="/data/liuhongdi/digv21/static/images/q2.png"//url,创建二维码url:="http://www.baidu.com/"qrCode, err := qrcode.New(url, qrcode.Highest)if err != nil {//return nil, errors.New("创建二维码失败")fmt.Println(err)return}qrCode.DisableBorder = truebgImg = qrCode.Image(256)//icon的路径headpath:="/data/liuhongdi/digv21/static/images/head.jpeg"avatarFile, err = os.Open(headpath)avatarImg, err = jpeg.Decode(avatarFile)//修改图片的大小avatarImg = resize.Resize(40, 40, avatarImg, resize.Lanczos3)//得到背景图的大小b := bgImg.Bounds()//居中设置icon到二维码图片offset = image.Pt((b.Max.X-avatarImg.Bounds().Max.X)/2, (b.Max.Y-avatarImg.Bounds().Max.Y)/2)m := image.NewRGBA(b)draw.Draw(m, b, bgImg, image.Point{X: 0, Y: 0,}, draw.Src)draw.Draw(m, avatarImg.Bounds().Add(offset), avatarImg, image.Point{X: 0, Y: 0}, draw.Over)//save imageerrsave:=SaveImage(pngpath,m)if (errsave != nil){fmt.Println(errsave)}//显示图片pngurl:= "/static/images/q2.png"html:="<img src='"+pngurl+"' />"c.Header("Content-Type", "text/html; charset=utf-8")c.String(200, html)return
}//保存image
func SaveImage(p string, src image.Image) error {f, err := os.OpenFile(p, os.O_SYNC|os.O_RDWR|os.O_CREATE, 0666)if err != nil {return err}defer f.Close()ext := filepath.Ext(p)if strings.EqualFold(ext, ".jpg") || strings.EqualFold(ext, ".jpeg") {err = jpeg.Encode(f, src, &jpeg.Options{Quality: 80})} else if strings.EqualFold(ext, ".png") {err = png.Encode(f, src)} else if strings.EqualFold(ext, ".gif") {err = gif.Encode(f, src, &gif.Options{NumColors: 256})}return err
}

2,其他相关代码可以访问github查看

四,测试效果

1,查看生成普通的二维码:

访问:

http://127.0.0.1:8080/code/getone

返回:

2,查看生成带icon或头像的二维码:

访问:

http://127.0.0.1:8080/code/geticon

返回:

五,查看库的版本:

module github.com/liuhongdi/digv21go 1.15require (github.com/gin-gonic/gin v1.6.3github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646github.com/skip2/go-qrcode v0.0.0-20191027152451-9434209cb086
)


http://chatgpt.dhexx.cn/article/Gk8G7ogd.shtml

相关文章

go语言web开发出错

2019独角兽企业重金招聘Python工程师标准>>> err listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 原因&#xff1a;开了两个服务器&#xff0c;造成监听端口冲突 转载于:https://my.osc…

go语言有哪些web框架

前言 由于工作需要&#xff0c;这些年来也接触了不少的开发框架&#xff0c;Golang的开发框架比较多&#xff0c;不过基本都是Web”框架”为主。这里稍微打了个引号&#xff0c;因为大部分”框架”从设计和功能定位上来讲&#xff0c;充其量都只能算是一个组件&#xff0c;需要…

go语言服务器代码,Go语言开发简单web服务器

欢迎&#xff0c;来自IP地址为&#xff1a;182.103.254.107 的朋友 Go语言由于其方便的并发通信机制以及强大的网络支持&#xff0c;常常被用于服务器软件的开发。本文将示例使用Go语言来开发简单的Web服务器。 HTTP协议是应用层协议&#xff0c;协议模型位于TCP之上&#xff0…

Go语言WEB开发[html/template包]

Go语言Web开发 Go语言提供了html/template包来支持模板渲染。Go提供的html/template包对HTML模板提供了丰富的模板语言&#xff0c;主要用于Web应用程序。 模板中的变量 模板中的变量通过{{.}} 来访问。 {{.}} 称为管道和root。 在模板文件内&#xff0c;{{.}}代表当前变量&…

Go语言web开发

一. HTTP Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应 Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据 Http报文(message)组成部分 请求行(request-line)请求头(head)请求体(body)响应头响应体 HTTP 1.1 实…

Go进阶:Go语言最热门的开源Web开发框架总结

注意&#xff1a;后续技术分享&#xff0c;第一时间更新&#xff0c;以及更多更及时的技术资讯和学习技术资料&#xff0c;将在公众号CTO Plus发布&#xff0c;请关注公众号&#xff1a;CTO Plus Go语言是近年来备受关注的一种编程语言&#xff0c;它以其高效、安全、简洁的特…

Go语言五大主流web框架

以下 star数截止2023年7月份 1.Gin&#xff08;69.7K&#xff09; 项目简介&#xff1a;Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。 仓库地址&#xff1a;https://github.com/gin-gonic/ginhttps:…

Go语言web开发入门

创建两个文件main.go 和hello.txt main.go package mainimport ("fmt""io/ioutil""net/http" )func sayHello(w http.ResponseWriter, r *http.Request) {b, _ : ioutil.ReadFile("D:/桌面/goprojects/gin框架快速入门/gin框架与Go语言模…

GO 语言 Web 开发实战一

xdm&#xff0c;咱今天分享一个 golang web 实战的 demo go 的 http 包&#xff0c;以前都有或多或多的提到一些&#xff0c;也有一些笔记在我们的历史文章中&#xff0c;今天来一个简单的实战 HTTP 编程 Get 先来一个 小例子&#xff0c;简单的写一个 Get 请求 拿句柄 设置…

goweb开发实战笔记(一)

目录 &#x1f9e1;Gin简介 &#x1f9e1;Gin特性 &#x1f9e1;Gin环境搭建 &#x1f9e1;HTTP请求和参数解析 创建Engine Handle方法处理 Engine分类处理 表单实体绑定 ShouldBindQuery ShouldBind JSON 多数据格式返回请求结果 []byte切片 string JSON HTML…

golang学习之go web 开发

文章目录 一、hello world二、请求处理1、url参数处理2、form参数处理3、header参数处理 三、响应处理1、ResponseWriter 四、cookie五、session实现1、session id2、session的存储3、session过期4、实现代码1、session 操作代码2、web服务3、登录页面4、session数据展示页面 一…

FlexSlider图片轮播切换jQuery插件

下载地址 flexSlider是一款强大的图片轮播插件。参数说明animation: "slide", // String: ["fade"|"slide"]&#xff0c;动画效果easing: "swing", // String: 滚动动画计时函数direction: "horizonta…

jQuery FlexSlider插件一些使用上的小tips

最近做的一个需求&#xff0c;用到了jQuery FlexSlider这个插件&#xff0c;本以为一个算是已经比较成熟的插件&#xff0c;用起来应该没什么难度&#xff0c;然而真正用起来才发现&#xff0c;其实还是有些坑的&#xff0c;不过好在这个插件源代码写的比较好&#xff0c;比较好…

jquery.flexslider-min.js实现banner轮播图效果

查看演示 立即下载 插件描述&#xff1a; jquery图片轮播插件仿支付宝2013版全屏图片幻灯片淡出淡进切换效果 实现方法 引用jquery和flexslider.js到你的页面 <script type"text/javascript" src"js/jquery-1.7.2.min.js"></script> <sc…

Vue+Element-ui实例_使用flexslider插件设计横向时间线

下面是做了一个类似时间线(history事件线)的页面&#xff0c;主要是记录一下log&#xff0c;或者history的操作记录。 主要难点&#xff1a; &#xff08;1&#xff09;一般的插件时间线例如(elementUI中的el-timeline)就是纵向的时间线&#xff0c;如果数据过多的话&#xf…

flexSlider 图片轮播插件的使用(附参数设置)

前提&#xff1a;下载插件&#xff08;官网下载地址&#xff1a;http://flexslider.woothemes.com/ 请用IE打开&#xff0c;chrome可能打不开&#xff1b;其他下载地址&#xff1a;点击打开链接&#xff09;&#xff0c;并引入flexslider.css和jquery.flexslider-min.js文件(缺…

flex

水平垂直居中也算是 CSS 领域最为常见的一个问题了&#xff0c;不同场景下的方法也各不相同&#xff0c;各有优劣。嗯&#xff0c;下面这种应该算是最便捷的了&#xff1a; <div class"g-container"><div class"g-box"></div> </div…

轮播插件——flexslider

轮播插件——flexslider, 首先&#xff0c;当我们需要轮播插件的时候呢&#xff0c;去浏览器中找自己需要的轮播插件&#xff0c;比如&#xff0c;搜索关键词“JQuery轮播插件”&#xff0c;就会出来很多网站&#xff0c;选一个点进去&#xff0c;预览效果&#xff0c;然后下载…

重现Struts1的操纵classLoader漏洞

注&#xff1a;本文仅限技术研究&#xff0c;探讨&#xff0c;测试使用. 2014年4月29日爆出的struts的可操纵classLoader的漏洞&#xff0c; 横跨struts1和struts2的所有版本。 影响面和问题的严重性几乎可以和heartbleed相媲美。 struts2要严重一些&#xff0c;对于struts1&am…

Struts1、Struts2、Hibernate、Spring框架工作原理介绍

Struts1工作原理 Struts1工作原理图 1 、初始化&#xff1a; struts 框架的总控制器 ActionServlet 是一个 Servlet &#xff0c;它在 web.xml 中配置成自动启动的 Servlet &#xff0c;在启动时总控制器会读取配置文件 (struts-config.xml) 的配置信息&#xff…