You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.2 KiB
Go

package util
import (
"fmt"
"image"
"image/color"
"image/draw"
"image/png"
"io/ioutil"
"log"
"os"
"github.com/fonchain/utils/utils"
"github.com/golang/freetype"
"github.com/nfnt/resize"
"golang.org/x/image/font"
)
func CreateQrCode(invitedCode, userName string) error {
QrCodePath, err := utils.GenQRCode("https://artist.fontree.cn/login?invitedCode=" + invitedCode)
if err != nil {
return err
}
tmp, err := os.Open(QrCodePath)
if err != nil {
return err
}
defer tmp.Close()
src, err := os.Open("./qrcodebg.png")
if err != nil {
log.Println(err)
return err
}
defer src.Close()
img, err := png.Decode(src)
if err != nil {
log.Println(err)
return err
}
outimage, _ := addLabel(img, userName+"邀请您注册画家宝用户", 210, 300, color.RGBA{255, 255, 255, 255}, 55, "font1716.ttf")
outimage, _ = addLabel(outimage, "(使用此二维码后,"+userName+"将成为你的邀请人)", 210, 400, color.RGBA{255, 255, 255, 255}, 38, "font1716.ttf")
outimage, _ = addLabel(outimage, "邀请码:"+invitedCode, 260, 1340, color.RGBA{69, 137, 239, 255}, 70, "font1716.ttf")
QrCode2Path := "static/qrcode/" + invitedCode + "-2.png"
f, err := os.Create(QrCode2Path)
if err != nil {
log.Println(err)
return err
}
defer f.Close()
newImg := image.NewNRGBA(image.Rect(0, 0, 1125, 2436))
// fe, err := os.Open("./" + artistPhoto.SmallPic + "_small.jpg")
qrImg, err := png.Decode(tmp)
if err != nil {
fmt.Println(err.Error())
return err
}
qrImg = resize.Resize(uint(700), uint(700), qrImg, resize.Lanczos3)
draw.Draw(newImg, newImg.Bounds(), outimage, outimage.Bounds().Min.Sub(image.Pt(0, 0)), draw.Over)
draw.Draw(newImg, newImg.Bounds(), qrImg, qrImg.Bounds().Min.Sub(image.Pt(210, 570)), draw.Over)
err = png.Encode(f, newImg)
if err != nil {
return err
}
tmp.Close()
tmps, err := os.OpenFile(QrCodePath, os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
return err
}
defer tmps.Close()
_, err = UploadToBos(tmps, fmt.Sprintf("artistmgmt/static/qrcode/%v.png", invitedCode))
if err != nil {
return err
}
// fmt.Println(urlss)
tmp2, err := os.Open(QrCode2Path)
if err != nil {
return err
}
defer tmp2.Close()
str, err := UploadToBos(tmp2, fmt.Sprintf("artistmgmt/static/qrcode/%v-2.png", invitedCode))
if err != nil {
return err
}
fmt.Println(str, "===============")
return nil
}
func addLabel(img image.Image, label string, x, y int, fontColor color.Color, size float64, fontPath string) (image.Image, error) {
bound := img.Bounds()
// 创建一个新的图片
rgba := image.NewRGBA(image.Rect(0, 0, bound.Dx(), bound.Dy()))
// 读取字体
fontBytes, err := ioutil.ReadFile(fontPath)
if err != nil {
return rgba, err
}
myFont, err := freetype.ParseFont(fontBytes)
if err != nil {
return rgba, err
}
draw.Draw(rgba, rgba.Bounds(), img, bound.Min, draw.Src)
c := freetype.NewContext()
c.SetDPI(72)
c.SetFont(myFont)
c.SetFontSize(size)
c.SetClip(rgba.Bounds())
c.SetDst(rgba)
uni := image.NewUniform(fontColor)
c.SetSrc(uni)
c.SetHinting(font.HintingNone)
// 在指定的位置显示
pt := freetype.Pt(x, y+int(c.PointToFixed(size)>>6))
if _, err := c.DrawString(label, pt); err != nil {
return rgba, err
}
return rgba, nil
}