Skip to content

Commit ed26d31

Browse files
authored
add: score new style (#655)
* newstyle * make lint happy
1 parent 76dbf5a commit ed26d31

File tree

4 files changed

+279
-65
lines changed

4 files changed

+279
-65
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/Baidu-AIP/golang-sdk v1.1.1
77
github.com/FloatTech/AnimeAPI v1.6.1-0.20230331074616-e33f890df71e
88
github.com/FloatTech/floatbox v0.0.0-20230331064925-9af336a84944
9-
github.com/FloatTech/gg v1.1.2
9+
github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08
1010
github.com/FloatTech/imgfactory v0.2.2-0.20230322091809-b0ddbe44b94b
1111
github.com/FloatTech/rendercard v0.0.10-0.20230223064326-45d29fa4ede9
1212
github.com/FloatTech/sqlite v1.5.7
@@ -24,7 +24,6 @@ require (
2424
github.com/fumiama/go-base16384 v1.6.4
2525
github.com/fumiama/go-registry v0.2.6
2626
github.com/fumiama/gotracemoe v0.0.3
27-
github.com/fumiama/imgsz v0.0.2
2827
github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565
2928
github.com/fumiama/unibase2n v0.0.0-20221020155353-02876e777430
3029
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
@@ -52,6 +51,7 @@ require (
5251
github.com/faiface/beep v1.1.0 // indirect
5352
github.com/fumiama/go-simple-protobuf v0.1.0 // indirect
5453
github.com/fumiama/gofastTEA v0.0.10 // indirect
54+
github.com/fumiama/imgsz v0.0.2 // indirect
5555
github.com/gabriel-vasile/mimetype v1.0.4 // indirect
5656
github.com/go-ole/go-ole v1.2.6 // indirect
5757
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ github.com/FloatTech/AnimeAPI v1.6.1-0.20230331074616-e33f890df71e h1:4V7UZyLZKm
66
github.com/FloatTech/AnimeAPI v1.6.1-0.20230331074616-e33f890df71e/go.mod h1:LSJN8VkJXBhyAdOolVNeUptJz6l1TZ+/CfXN1OafyEY=
77
github.com/FloatTech/floatbox v0.0.0-20230331064925-9af336a84944 h1:/eQoMa6Aj3coF5F7yhzZe1+SzX6SItul7MW8//pl18o=
88
github.com/FloatTech/floatbox v0.0.0-20230331064925-9af336a84944/go.mod h1:FwQm6wk+b4wuW54KCKn3zccMX47Q5apnHD/Yakzv0fI=
9-
github.com/FloatTech/gg v1.1.2 h1:YolgOYg3uDHc1+g0bLtt6QuRA/pvLn+b9IBCIhOOX88=
10-
github.com/FloatTech/gg v1.1.2/go.mod h1:uzPzAeT35egARdRuu+1oyjU3CmTwCceoq3Vvje7LpcI=
9+
github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 h1:dPLeoiTVSBlgls+66EB/UJ2e38BaASmBN5nANaycSBU=
10+
github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08/go.mod h1:uzPzAeT35egARdRuu+1oyjU3CmTwCceoq3Vvje7LpcI=
1111
github.com/FloatTech/imgfactory v0.2.2-0.20230322091809-b0ddbe44b94b h1:VMNci4SWBySdw/6poqF9Dn9zlT5ntTFSJOEEBjRnJ/4=
1212
github.com/FloatTech/imgfactory v0.2.2-0.20230322091809-b0ddbe44b94b/go.mod h1:el5hGpj1C1bDRxcTXYRwEivDCr40zZeJpcrLrB1fajs=
1313
github.com/FloatTech/rendercard v0.0.10-0.20230223064326-45d29fa4ede9 h1:hffajvmQFfP68U6wUwHemPuuwCUoss+SEFfoLYwbGwE=

plugin/score/draw.go

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@ package score
33

44
import (
55
"bytes"
6+
"errors"
67
"fmt"
78
"image"
89
"image/color"
910
"strconv"
11+
"sync"
1012
"time"
1113

1214
"github.com/FloatTech/floatbox/file"
1315
"github.com/FloatTech/gg"
1416
"github.com/FloatTech/imgfactory"
17+
"github.com/FloatTech/rendercard"
1518
"github.com/FloatTech/zbputils/control"
1619
"github.com/FloatTech/zbputils/img/text"
1720
"github.com/disintegration/imaging"
@@ -269,3 +272,219 @@ func drawScore17(a *scdata) (image.Image, error) {
269272
canvas.SetRGB255(255, 255, 255)
270273
return canvas.Image(), nil
271274
}
275+
276+
func drawScore17b2(a *scdata) (img image.Image, err error) {
277+
fontdata, err := file.GetLazyData(text.GlowSansFontFile, control.Md5File, false)
278+
if err != nil {
279+
return
280+
}
281+
282+
getAvatar, err := initPic(a.picfile, a.uid)
283+
if err != nil {
284+
return
285+
}
286+
287+
back, err := gg.LoadImage(a.picfile)
288+
if err != nil {
289+
return
290+
}
291+
292+
bx, by := float64(back.Bounds().Dx()), float64(back.Bounds().Dy())
293+
294+
sc := 1280 / bx
295+
296+
colors := gg.TakeColor(back, 3)
297+
298+
canvas := gg.NewContext(1280, 1280*int(by)/int(bx))
299+
300+
cw, ch := float64(canvas.W()), float64(canvas.H())
301+
302+
sch := ch * 6 / 10
303+
304+
var blurback, scbackimg, backshadowimg, avatarimg, avatarbackimg, avatarshadowimg, whitetext, blacktext image.Image
305+
var wg sync.WaitGroup
306+
wg.Add(8)
307+
308+
go func() {
309+
defer wg.Done()
310+
scback := gg.NewContext(canvas.W(), canvas.H())
311+
scback.ScaleAbout(sc, sc, cw/2, ch/2)
312+
scback.DrawImageAnchored(back, canvas.W()/2, canvas.H()/2, 0.5, 0.5)
313+
scback.Identity()
314+
315+
go func() {
316+
defer wg.Done()
317+
blurback = imaging.Blur(scback.Image(), 20)
318+
}()
319+
320+
scbackimg = rendercard.Fillet(scback.Image(), 12)
321+
}()
322+
323+
go func() {
324+
defer wg.Done()
325+
pureblack := gg.NewContext(canvas.W(), canvas.H())
326+
pureblack.SetRGBA255(0, 0, 0, 255)
327+
pureblack.Clear()
328+
329+
shadow := gg.NewContext(canvas.W(), canvas.H())
330+
shadow.ScaleAbout(0.6, 0.6, cw-cw/3, ch/2)
331+
shadow.DrawImageAnchored(pureblack.Image(), canvas.W()-canvas.W()/3, canvas.H()/2, 0.5, 0.5)
332+
shadow.Identity()
333+
334+
backshadowimg = imaging.Blur(shadow.Image(), 8)
335+
}()
336+
337+
aw, ah := (ch-sch)/2/2/2*3, (ch-sch)/2/2/2*3
338+
339+
go func() {
340+
defer wg.Done()
341+
avatar, _, err := image.Decode(bytes.NewReader(getAvatar))
342+
if err != nil {
343+
return
344+
}
345+
346+
isc := (ch - sch) / 2 / 2 / 2 * 3 / float64(avatar.Bounds().Dy())
347+
348+
scavatar := gg.NewContext(int(aw), int(ah))
349+
350+
scavatar.ScaleAbout(isc, isc, aw/2, ah/2)
351+
scavatar.DrawImageAnchored(avatar, scavatar.W()/2, scavatar.H()/2, 0.5, 0.5)
352+
scavatar.Identity()
353+
354+
avatarimg = rendercard.Fillet(scavatar.Image(), 8)
355+
}()
356+
357+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/2/2)
358+
if err != nil {
359+
return
360+
}
361+
namew, _ := canvas.MeasureString(a.nickname)
362+
363+
go func() {
364+
defer wg.Done()
365+
avatarshadowimg = imaging.Blur(customrectangle(cw, ch, aw, ah, namew, color.Black), 8)
366+
}()
367+
368+
go func() {
369+
defer wg.Done()
370+
avatarbackimg = customrectangle(cw, ch, aw, ah, namew, colors[0])
371+
}()
372+
373+
go func() {
374+
defer wg.Done()
375+
whitetext, err = customtext(a, fontdata, cw, ch, aw, color.White)
376+
if err != nil {
377+
return
378+
}
379+
}()
380+
381+
go func() {
382+
defer wg.Done()
383+
blacktext, err = customtext(a, fontdata, cw, ch, aw, color.Black)
384+
if err != nil {
385+
return
386+
}
387+
}()
388+
389+
wg.Wait()
390+
if scbackimg == nil || backshadowimg == nil || avatarimg == nil || avatarbackimg == nil || avatarshadowimg == nil || whitetext == nil || blacktext == nil {
391+
err = errors.New("图片渲染失败")
392+
return
393+
}
394+
395+
canvas.DrawImageAnchored(blurback, canvas.W()/2, canvas.H()/2, 0.5, 0.5)
396+
397+
canvas.DrawImage(backshadowimg, 0, 0)
398+
399+
canvas.ScaleAbout(0.6, 0.6, cw-cw/3, ch/2)
400+
canvas.DrawImageAnchored(scbackimg, canvas.W()-canvas.W()/3, canvas.H()/2, 0.5, 0.5)
401+
canvas.Identity()
402+
403+
canvas.DrawImage(avatarshadowimg, 0, 0)
404+
canvas.DrawImage(avatarbackimg, 0, 0)
405+
canvas.DrawImageAnchored(avatarimg, int((ch-sch)/2/2), int((ch-sch)/2/2), 0.5, 0.5)
406+
407+
canvas.DrawImage(blacktext, 2, 2)
408+
canvas.DrawImage(whitetext, 0, 0)
409+
410+
img = canvas.Image()
411+
return
412+
}
413+
414+
func customrectangle(cw, ch, aw, ah, namew float64, rtgcolor color.Color) (img image.Image) {
415+
canvas := gg.NewContext(int(cw), int(ch))
416+
sch := ch * 6 / 10
417+
canvas.DrawRoundedRectangle((ch-sch)/2/2-aw/2-aw/40, (ch-sch)/2/2-aw/2-ah/40, aw+aw/40*2, ah+ah/40*2, 8)
418+
canvas.SetColor(rtgcolor)
419+
canvas.Fill()
420+
canvas.DrawRoundedRectangle((ch-sch)/2/2, (ch-sch)/2/2-ah/4, aw/2+aw/40*5+namew, ah/2, 8)
421+
canvas.Fill()
422+
423+
img = canvas.Image()
424+
return
425+
}
426+
427+
func customtext(a *scdata, fontdata []byte, cw, ch, aw float64, textcolor color.Color) (img image.Image, err error) {
428+
canvas := gg.NewContext(int(cw), int(ch))
429+
canvas.SetColor(textcolor)
430+
scw, sch := cw*6/10, ch*6/10
431+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/2/2)
432+
if err != nil {
433+
return
434+
}
435+
canvas.DrawStringAnchored(a.nickname, (ch-sch)/2/2+aw/2+aw/40*2, (ch-sch)/2/2, 0, 0.5)
436+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/2/3*2)
437+
if err != nil {
438+
return
439+
}
440+
canvas.DrawStringAnchored(time.Now().Format("2006/01/02"), cw-cw/6, ch/2-sch/2-canvas.FontHeight(), 0.5, 0.5)
441+
442+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/2/2)
443+
if err != nil {
444+
return
445+
}
446+
nextrankScore := 0
447+
if a.rank < 10 {
448+
nextrankScore = rankArray[a.rank+1]
449+
} else {
450+
nextrankScore = SCOREMAX
451+
}
452+
nextLevelStyle := strconv.Itoa(a.level) + "/" + strconv.Itoa(nextrankScore)
453+
454+
canvas.DrawStringAnchored("Level "+strconv.Itoa(a.rank), cw/3*2-scw/2, ch/2+sch/2+canvas.FontHeight(), 0, 0.5)
455+
canvas.DrawStringAnchored(nextLevelStyle, cw/3*2+scw/2, ch/2+sch/2+canvas.FontHeight(), 1, 0.5)
456+
457+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/2/3)
458+
if err != nil {
459+
return
460+
}
461+
462+
canvas.DrawStringAnchored("Create By ZeroBot-Plugin "+banner.Version, 0+4, ch, 0, -0.5)
463+
464+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/5*3)
465+
if err != nil {
466+
return
467+
}
468+
469+
tempfh := canvas.FontHeight()
470+
471+
canvas.DrawStringAnchored(getHourWord(time.Now()), ((cw-scw)-(cw/3-scw/2))/8, (ch-sch)/2+sch/4, 0, 0.5)
472+
473+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/5)
474+
if err != nil {
475+
return
476+
}
477+
478+
canvas.DrawStringAnchored("ATRI币 + "+strconv.Itoa(a.inc), ((cw-scw)-(cw/3-scw/2))/8, (ch-sch)/2+sch/4+tempfh, 0, 0.5)
479+
canvas.DrawStringAnchored("EXP + 1", ((cw-scw)-(cw/3-scw/2))/8, (ch-sch)/2+sch/4+tempfh+canvas.FontHeight(), 0, 1)
480+
481+
err = canvas.ParseFontFace(fontdata, (ch-sch)/2/4)
482+
if err != nil {
483+
return
484+
}
485+
486+
canvas.DrawStringAnchored("你有 "+strconv.Itoa(a.score)+" 枚ATRI币", ((cw-scw)-(cw/3-scw/2))/8, (ch-sch)/2+sch/4*3, 0, 0.5)
487+
488+
img = canvas.Image()
489+
return
490+
}

0 commit comments

Comments
 (0)