From c01267c421a8bef4b5de65c95e1e4d7fbb707868 Mon Sep 17 00:00:00 2001 From: Jiang-Red <79574799+Jiang-Red@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:01:39 +0000 Subject: [PATCH] new serverpic art styles --- .github/workflows/pull.yml | 2 +- .github/workflows/push.yml | 2 +- .golangci.yml | 2 +- config.go | 12 ++++-- go.mod | 2 +- logo.go | 17 +++++++++ serverpic.go | 78 +++++++++++++++++++++++++++++++++++++- 7 files changed, 105 insertions(+), 10 deletions(-) diff --git a/.github/workflows/pull.yml b/.github/workflows/pull.yml index 68fe2d8..45e3ef8 100644 --- a/.github/workflows/pull.yml +++ b/.github/workflows/pull.yml @@ -8,7 +8,7 @@ jobs: - name: Set up Go uses: actions/setup-go@master with: - go-version: 1.19 + go-version: 1.24 - name: Check out code into the Go module directory uses: actions/checkout@master diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index d0fa831..d469a1f 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -8,7 +8,7 @@ jobs: - name: Set up Go uses: actions/setup-go@master with: - go-version: 1.19 + go-version: 1.24 - name: Check out code into the Go module directory uses: actions/checkout@master diff --git a/.golangci.yml b/.golangci.yml index 0f02d88..cb2822c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -62,7 +62,7 @@ run: tests: false skip-dirs: - order - go: '1.20' + go: '1.24' # output configuration options output: diff --git a/config.go b/config.go index 436cabc..cf663c5 100644 --- a/config.go +++ b/config.go @@ -60,10 +60,14 @@ func (t *Title) Sum64() uint64 { type Alignment uint8 const ( - NilAlign Alignment = iota // NilAlign .. - AlignLeft // AlignLeft 左对齐 - AlignCenter // AlignCenter 居中对齐 - AlignRight // AlignRight 右对齐 + // NilAlign 默认 + NilAlign Alignment = iota + // AlignLeft 左对齐 + AlignLeft + // AlignCenter 居中对齐 + AlignCenter + // AlignRight 右对齐 + AlignRight ) // Card 卡片配置 diff --git a/go.mod b/go.mod index a00a085..421100e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/FloatTech/rendercard -go 1.20 +go 1.24.2 require ( github.com/FloatTech/floatbox v0.0.0-20240505082030-226ec6713e14 diff --git a/logo.go b/logo.go index ab1ea08..d07c897 100644 --- a/logo.go +++ b/logo.go @@ -62,6 +62,23 @@ func RenderServerListLogo(fontdata []byte) (img image.Image, err error) { canvas.DrawImage(strokedimg, -3, 3) canvas.DrawImage(coloredimg, 0, 0) + shadowcanvas := gg.NewContext(w, h) + + err =shadowcanvas.SetMask(canvas.AsMask()) + if err != nil { + return + } + shadowcanvas.DrawRectangle(0, 0, float64(shadowcanvas.W()), float64(shadowcanvas.H())) + shadowcanvas.SetRGBA255(0, 0, 0, 255) + shadowcanvas.Fill() + + err =canvas.SetMask(canvas.AsMask()) + if err != nil { + return + } + canvas.InvertMask() + canvas.DrawImage(shadowcanvas.Image(), 3, 4) + img = canvas.Image() return } diff --git a/serverpic.go b/serverpic.go index 080e319..21471f4 100644 --- a/serverpic.go +++ b/serverpic.go @@ -2,6 +2,8 @@ package rendercard import ( "image" + "image/color" + "math/rand" "sync" "github.com/FloatTech/floatbox/math" @@ -135,15 +137,63 @@ func renderinfocards(torussd, glowsd []byte, plugininfos []*PluginInfo) (img ima beginw, beginh := 24.0, 0.0 for i := 0; i < cardnum; i++ { canvas.SetRGBA255(204, 51, 51, 255) - if plugininfos[i].Status { + fade := gg.NewLinearGradient(beginw+10, 0, beginw+cardw-10, 0) + fade.AddColorStop(1, color.NRGBA{204, 51, 51, 255}) + fade.AddColorStop(0.8, color.NRGBA{204, 51, 51, 191}) + fade.AddColorStop(0.7, color.NRGBA{204, 51, 51, 63}) + fade.AddColorStop(0.6, color.NRGBA{204, 51, 51, 0}) + fade.AddColorStop(0, color.NRGBA{204, 51, 51, 0}) + statusimage := drawEnableOrDisableImage(false) + + if plugininfos[i].Status && rand.Intn(2) == 0 { canvas.SetRGBA255(136, 178, 0, 255) + fade = gg.NewLinearGradient(beginw+10, 0, beginw+cardw-10, 0) + fade.AddColorStop(1, color.NRGBA{136, 178, 0, 255}) + fade.AddColorStop(0.8, color.NRGBA{136, 178, 0, 191}) + fade.AddColorStop(0.7, color.NRGBA{136, 178, 0, 63}) + fade.AddColorStop(0.6, color.NRGBA{136, 178, 0, 0}) + fade.AddColorStop(0, color.NRGBA{136, 178, 0, 0}) + statusimage = drawEnableOrDisableImage(true) } + + canvas.DrawRoundedRectangle(beginw+10, beginh, cardw-10, cardh, 16) + canvas.Clip() + canvas.InvertMask() + canvas.DrawRoundedRectangle(beginw, beginh, cardw/2, cardh, 16) canvas.Fill() - canvas.SetRGBA255(34, 26, 33, 255) + canvas.ResetClip() + + canvas.SetRGBA255(255, 255, 255, 217) canvas.DrawRoundedRectangle(beginw+10, beginh, cardw-10, cardh, 16) + canvas.FillPreserve() + canvas.SetFillStyle(fade) canvas.Fill() + canvas.SetFillStyle(nil) + + alphacanvas := gg.NewContext(w, h) + alphacanvas.SetRGBA255(255, 255, 255, 93) + alphacanvas.Clear() + + err = canvas.SetMask(alphacanvas.AsMask()) + if err != nil { + return + } + canvas.DrawImageAnchored(statusimage, int(beginw+cardw)-10-5, int(beginh+cardh/2), 1, 0.5) + canvas.ResetClip() + + err = canvas.SetMask(alphacanvas.AsMask()) + if err != nil { + return + } + canvas.DrawRoundedRectangle(beginw+10, beginh, cardw-10, cardh, 16) + canvas.Clip() + canvas.DrawCircle(beginw+cardw-10-5-50/2, beginh+cardh/2, float64(cardh-10)/2) + canvas.SetLineWidth(50 * 0.185) + canvas.Stroke() + canvas.ResetClip() + beginw += cardw + spacingw if (i+1)%3 == 0 { beginw = spacingw @@ -181,3 +231,27 @@ func renderinfocards(torussd, glowsd []byte, plugininfos []*PluginInfo) (img ima img = canvas.Image() return } + +func drawEnableOrDisableImage(status bool) image.Image { + dc := gg.NewContext(50, 50) + dcwf, dchf := float64(dc.W()), float64(dc.H()) + fac := 0.185 + if status { + dc.RotateAbout(gg.Radians(-45), dcwf/2, dchf/2) + dc.DrawRectangle(dcwf*fac+dcwf*fac/2, (dchf-dchf/2)/2-1, dcwf, dcwf/2-dcwf*fac) + dc.Clip() + dc.InvertMask() + dc.DrawRectangle(dcwf*fac/2, (dchf-dchf/2)/2, dcwf-dcwf*fac, dchf/2) + dc.SetRGBA255(255, 255, 255, 255) + dc.Fill() + dc.ResetClip() + return dc.Image() + } + dc.RotateAbout(gg.Radians(-45), dcwf/2, dchf/2) + dc.DrawRectangle((dcwf-dcwf*fac)/2, 0, dcwf*fac, dchf) + dc.SetRGBA255(255, 255, 255, 255) + dc.Fill() + dc.DrawRectangle(0, (dcwf-dcwf*fac)/2, dchf, dcwf*fac) + dc.Fill() + return dc.Image() +}