瀏覽代碼

fix: 测试分享图

hsun 3 年之前
父節點
當前提交
cd1a286c23
共有 2 個文件被更改,包括 70 次插入13 次删除
  1. 6 10
      controller/activity/activity.go
  2. 64 3
      utils/drawtext.go

+ 6 - 10
controller/activity/activity.go

@@ -199,8 +199,7 @@ func GetActivityShareImg(c *gin.Context)  {
 		"Sunday":    "周日",
 	}
 	weekStr := WeekDayMap[activityWeek]
-	fmt.Println(weekStr)
-	timeStr := activityDate + " " + activityStart + "-" + activityEnd
+	timeStr := activityDate + " " + activityStart + "-" + activityEnd + " " + weekStr
 
 	// 获取原分享图
 	originShareUrl := "static/img/report_share.png"
@@ -221,7 +220,7 @@ func GetActivityShareImg(c *gin.Context)  {
 
 	// 处理文字x轴y轴点
 	drawText := activityInfo.ActivityTypeName
-	fontSize := 35
+	fontSize := 40
 	fontWidth := 50
 	x, y, newSize, err := calcuDrawXandY(drawText, fontSize, 500, 400)
 	if err != nil {
@@ -232,19 +231,16 @@ func GetActivityShareImg(c *gin.Context)  {
 	// 生成新分享图
 	var drawInfo []*utils.DrawTextInfo
 	text := &utils.DrawTextInfo{
-		Text: drawText, X: x, Y: y - 50,
+		Text: drawText, X: x, Y: y - 20, FontSize: fontSize,
 	}
 	textTime := &utils.DrawTextInfo{
-		Text: timeStr, X: 35, Y: y,
+		Text: timeStr, X: 35, Y: y + 30, FontSize: 30,
 	}
-	textWeek := &utils.DrawTextInfo{
-		Text: weekStr, X: 210, Y: y + 50,
-	}
-	drawInfo = append(drawInfo, text, textTime, textWeek)
+	drawInfo = append(drawInfo, text, textTime)
 	var colorRGBA = utils.FontRGBA{
 		R: 255, G: 255, B: 255, A: 255,
 	}
-	picByte, err := utils.DrawStringOnImage(bytes, drawInfo, colorRGBA, float64(newSize), fontWidth)
+	picByte, err := utils.DrawStringRowsOnImage(bytes, drawInfo, colorRGBA, float64(newSize), fontWidth)
 	if err != nil {
 		response.Fail("生成新封面图失败", c)
 		return

+ 64 - 3
utils/drawtext.go

@@ -20,9 +20,10 @@ import (
 
 //DrawTextInfo 图片绘字信息
 type DrawTextInfo struct {
-	Text string
-	X    int
-	Y    int
+	Text 		string
+	X    		int
+	Y    		int
+	FontSize	int
 }
 
 //DrawRectInfo 图片画框信息
@@ -294,3 +295,63 @@ func DrawStringOnImage(imageData []byte, infos []*DrawTextInfo, colorRGBA FontRG
 
 	return
 }
+
+
+// DrawStringRowsOnImage 生成图片
+func DrawStringRowsOnImage(imageData []byte, infos []*DrawTextInfo, colorRGBA FontRGBA, fontSize float64, fontWidth int) (picBytes bytes.Buffer, err error) {
+	//判断图片类型
+	var backgroud image.Image
+	filetype := http.DetectContentType(imageData)
+	switch filetype {
+	case "image/jpeg", "image/jpg":
+		backgroud, err = jpeg.Decode(bytes.NewReader(imageData))
+		if err != nil {
+			fmt.Println("jpeg error")
+			return
+		}
+
+	case "image/gif":
+		backgroud, err = gif.Decode(bytes.NewReader(imageData))
+		if err != nil {
+			return
+		}
+
+	case "image/png":
+		backgroud, err = png.Decode(bytes.NewReader(imageData))
+		if err != nil {
+			return
+		}
+	default:
+		return
+	}
+	des := Image2RGBA(backgroud)
+
+	//新建笔刷
+	ttfPath := "static/ttf/songti.ttf"
+	textBrush, _ := NewTextBrush(ttfPath, fontSize, image.Black, fontWidth)
+
+	//Px Py 绘图开始坐标 text要绘制的文字
+	//调整颜色
+
+	for _, info := range infos {
+		c := freetype.NewContext()
+		c.SetDPI(72)
+		c.SetFont(textBrush.FontType)
+		c.SetHinting(font.HintingFull)
+		c.SetFontSize(float64(info.FontSize))
+		c.SetClip(des.Bounds())
+		c.SetDst(des)
+		textBrush.FontColor = image.NewUniform(color.RGBA{
+			R: colorRGBA.R,
+			G: colorRGBA.G,
+			B: colorRGBA.B,
+			A: colorRGBA.A,
+		})
+		c.SetSrc(textBrush.FontColor)
+		c.DrawString(info.Text, freetype.Pt(info.X, info.Y))
+	}
+
+	err = jpeg.Encode(&picBytes, des, nil)
+
+	return
+}