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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。