img.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package service
  2. import (
  3. "bufio"
  4. "bytes"
  5. "context"
  6. "crypto/md5"
  7. "encoding/hex"
  8. "fmt"
  9. "image/jpeg"
  10. "strconv"
  11. "go-common/app/job/main/answer/model"
  12. "go-common/library/log"
  13. "go-common/library/text/translate/chinese"
  14. "github.com/golang/freetype"
  15. )
  16. var (
  17. platform = map[string]bool{"H5": true, "PC": false}
  18. fileFormat = "%s_A-%s_B-%s_%s"
  19. language = []string{"zh-CN", "zh-TW"}
  20. )
  21. // createBFSImg create bfs img.
  22. func (s *Service) createBFSImg(c context.Context, que *model.LabourQs) (err error) {
  23. log.Info("createBFSImg(%v)", que)
  24. as := [2]string{model.ExtraAnsA, model.ExtraAnsB}
  25. for _, langv := range language {
  26. if langv == "zh-TW" {
  27. que.Question = chinese.Convert(c, que.Question)
  28. as = [2]string{chinese.Convert(c, model.ExtraAnsA), chinese.Convert(c, model.ExtraAnsB)}
  29. }
  30. for ps, pb := range platform {
  31. quec := s.dao.QueConf(pb)
  32. imgh := s.dao.Height(quec, que.Question, 2)
  33. r := s.dao.Board(imgh)
  34. imgc := s.dao.Context(r, s.c.Properties.FontFilePath)
  35. pt := freetype.Pt(0, int(quec.Fontsize))
  36. s.dao.DrawQue(imgc, que.Question, quec, &pt)
  37. s.dao.DrawAns(imgc, quec, as, &pt)
  38. buf := new(bytes.Buffer)
  39. jpeg.Encode(buf, r, nil)
  40. bufReader := bufio.NewReader(buf)
  41. m := md5.New()
  42. m.Write([]byte(fmt.Sprintf(fileFormat, strconv.FormatInt(que.ID, 10), as[0], as[1], ps)))
  43. fname := hex.EncodeToString(m.Sum(nil)) + ".jpg"
  44. location, err := s.dao.Upload(c, "image/jpeg", fname, bufReader)
  45. if err != nil {
  46. log.Error("question (%v) bfs upload failed error(%s)", que, err)
  47. continue
  48. }
  49. log.Info("upload img success.fname:%s,location:%s,lang:%s", fname, location, langv)
  50. }
  51. }
  52. return
  53. }