refactor: 优化 LastDiffToImage 函数,动态调整背景图大小以适应头像和文本,提升图像生成效果

This commit is contained in:
lixiangwuxian 2025-05-10 14:37:22 +08:00
parent 74b92f675b
commit 761dde3693

View File

@ -6,6 +6,7 @@ import (
"image/color" "image/color"
"image/draw" "image/draw"
"log" "log"
"math"
"os" "os"
"strings" "strings"
"time" "time"
@ -542,14 +543,7 @@ func (p PlayerDataLite) LastDiffToImage(lastDayQueryData PlayerDataLite) string
// } // }
baseboard := sprite.NewNamedSpriteBoard() baseboard := sprite.NewNamedSpriteBoard()
background := image.NewRGBA(image.Rect(0, 0, 500, 1000))
draw.Draw(background, background.Bounds(), image.White, image.Point{}, draw.Src)
backgroundSpirit := sprite.Sprite{
Name: "background",
Image: background,
Index: 0,
}
baseboard.AddSprite(&backgroundSpirit)
avatar, err := util.ResizeImageByMaxHeight2Image(filePath, 20) avatar, err := util.ResizeImageByMaxHeight2Image(filePath, 20)
if err != nil { if err != nil {
log.Default().Printf("缩放头像失败url:%s,err:%v", p.Avatar, err) log.Default().Printf("缩放头像失败url:%s,err:%v", p.Avatar, err)
@ -621,10 +615,22 @@ func (p PlayerDataLite) LastDiffToImage(lastDayQueryData PlayerDataLite) string
Name: "text", Name: "text",
Image: textImg, Image: textImg,
Index: 2, Index: 2,
Position: image.Point{X: 23, Y: 23}, Position: image.Point{X: 23, Y: 0},
} }
baseboard.AddSprite(&textSpirit) baseboard.AddSprite(&textSpirit)
totalWidth := textImg.Bounds().Dx() + avatar.Bounds().Dx()
totalHeight := math.Max(float64(textImg.Bounds().Dy()), float64(avatar.Bounds().Dy()))
background := image.NewRGBA(image.Rect(0, 0, int(totalWidth), int(totalHeight)))
draw.Draw(background, background.Bounds(), image.White, image.Point{}, draw.Src)
backgroundSpirit := sprite.Sprite{
Name: "background",
Image: background,
Index: 0,
}
baseboard.AddSprite(&backgroundSpirit)
if err := baseboard.SaveToPng(util.GenTempFilePath("cbl.png")); err != nil { if err := baseboard.SaveToPng(util.GenTempFilePath("cbl.png")); err != nil {
log.Default().Printf("保存图片失败err:%v", err) log.Default().Printf("保存图片失败err:%v", err)
} }