golang 生成二维码海报的实现代码
生成带头像的二维码
import(
"errors"
"fmt"
"github.com/nfnt/resize"
"github.com/skip2/go-qrcode"
"image"
"image/draw"
"image/png"
"os"
)
varerrerror
funccreateAvatar()(image.Image,error){
var(
bgImgimage.Image
offsetimage.Point
avatarFile*os.File
avatarImgimage.Image
)
bgImg,err=createQrCode("http://www.baidu.com")
iferr!=nil{
fmt.Println("创建二维码失败:",err)
returnnil,errors.New("创建二维码失败")
}
avatarFile,err=os.Open("./avatar.png")
avatarImg,err=png.Decode(avatarFile)
avatarImg=ImageResize(avatarImg,40,40)
b:=bgImg.Bounds()
//设置为居中
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)
returnm,err
}
funccreateQrCode(contentstring)(imgimage.Image,errerror){
varqrCode*qrcode.QRCode
qrCode,err=qrcode.New(content,qrcode.Highest)
iferr!=nil{
returnnil,errors.New("创建二维码失败")
}
qrCode.DisableBorder=true
img=qrCode.Image(150)
returnimg,nil
}
funcImageResize(srcimage.Image,w,hint)image.Image{
returnresize.Resize(uint(w),uint(h),src,resize.Lanczos3)
}
预览
合成到海报
funcmain(){
var(
bgFile*os.File
bgImgimage.Image
qrCodeImgimage.Image
offsetimage.Point
)
//01:打开背景图片
bgFile,err=os.Open("./bg.png")
iferr!=nil{
fmt.Println("打开背景图片失败",err)
return
}
deferbgFile.Close()
//02:编码为图片格式
bgImg,err=png.Decode(bgFile)
iferr!=nil{
fmt.Println("背景图片编码失败:",err)
return
}
//03:生成二维码
qrCodeImg,err=createAvatar()
iferr!=nil{
fmt.Println("生成二维码失败:",err)
return
}
offset=image.Pt(426,475)
b:=bgImg.Bounds()
m:=image.NewRGBA(b)
draw.Draw(m,b,bgImg,image.Point{X:0,Y:0,},draw.Src)
draw.Draw(m,qrCodeImg.Bounds().Add(offset),qrCodeImg,image.Point{X:0,Y:0},draw.Over)
//上传至oss时这段要改
i,_:=os.Create(path.Base("a2.png"))
_=png.Encode(i,m)
deferi.Close()
}
预览
上传至阿里云
funcossClient()(bucket*alioss.Bucket,errerror){
var(
keystring="xxx"
bucketNamestring="xxx"
secretstring="xxx"
endpointstring="xxx"
)
//创建OSSClient实例。
client,err=alioss.New(endpoint,key,secret)
iferr!=nil{
fmt.Println("获取阿里云oss实例失败:",err)
returnnil,errors.New("资源服务器配置有误")
}
//获取存储空间。
bucket,err=client.Bucket(bucketName)
iferr!=nil{
logger.Error("获取阿里云oss存储空间错误:",err)
returnnil,errors.New("获取存储服务器失败")
}
returnbucket,nil
}
开始上传
将之前注释的那段删除修改成这段
bucket,err=ossClient()
iferr!=nil{
fmt.Println("error:",err)
return
}
imgBuff:=bytes.NewBuffer(nil)//开辟一个新的空buff
err=png.Encode(imgBuff,m)//img写入到buff
iferr!=nil{
fmt.Println("写入缓冲区失败",err)
return
}
err=bucket.PutObject("qrcode/2-1.png",imgBuff)
fmt.Println("error:",err)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。