go-common/app/job/main/answer/service/img.go
2019-04-22 18:49:16 +08:00

63 lines
1.6 KiB
Go

package service
import (
"bufio"
"bytes"
"context"
"crypto/md5"
"encoding/hex"
"fmt"
"image/jpeg"
"strconv"
"go-common/app/job/main/answer/model"
"go-common/library/log"
"go-common/library/text/translate/chinese"
"github.com/golang/freetype"
)
var (
platform = map[string]bool{"H5": true, "PC": false}
fileFormat = "%s_A-%s_B-%s_%s"
language = []string{"zh-CN", "zh-TW"}
)
// createBFSImg create bfs img.
func (s *Service) createBFSImg(c context.Context, que *model.LabourQs) (err error) {
log.Info("createBFSImg(%v)", que)
as := [2]string{model.ExtraAnsA, model.ExtraAnsB}
for _, langv := range language {
if langv == "zh-TW" {
que.Question = chinese.Convert(c, que.Question)
as = [2]string{chinese.Convert(c, model.ExtraAnsA), chinese.Convert(c, model.ExtraAnsB)}
}
for ps, pb := range platform {
quec := s.dao.QueConf(pb)
imgh := s.dao.Height(quec, que.Question, 2)
r := s.dao.Board(imgh)
imgc := s.dao.Context(r, s.c.Properties.FontFilePath)
pt := freetype.Pt(0, int(quec.Fontsize))
s.dao.DrawQue(imgc, que.Question, quec, &pt)
s.dao.DrawAns(imgc, quec, as, &pt)
buf := new(bytes.Buffer)
jpeg.Encode(buf, r, nil)
bufReader := bufio.NewReader(buf)
m := md5.New()
m.Write([]byte(fmt.Sprintf(fileFormat, strconv.FormatInt(que.ID, 10), as[0], as[1], ps)))
fname := hex.EncodeToString(m.Sum(nil)) + ".jpg"
location, err := s.dao.Upload(c, "image/jpeg", fname, bufReader)
if err != nil {
log.Error("question (%v) bfs upload failed error(%s)", que, err)
continue
}
log.Info("upload img success.fname:%s,location:%s,lang:%s", fname, location, langv)
}
}
return
}