131 lines
3.2 KiB
Go
131 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
|
||
|
}
|