|
1 |
| -// Package score 签到,答题得分 |
| 1 | +// Package score 签到 |
2 | 2 | package score
|
3 | 3 |
|
4 | 4 | import (
|
@@ -175,3 +175,97 @@ func drawScore15(a *scdata) (image.Image, error) {
|
175 | 175 | canvas.DrawString(fmt.Sprintf("%d/%d", a.level, nextrankScore), float64(back.Bounds().Size().X)*0.75, float64(back.Bounds().Size().Y)*1.62)
|
176 | 176 | return canvas.Image(), nil
|
177 | 177 | }
|
| 178 | + |
| 179 | +func drawScore17(a *scdata) (image.Image, error) { |
| 180 | + getAvatar, err := initPic(a.picfile, a.uid) |
| 181 | + if err != nil { |
| 182 | + return nil, err |
| 183 | + } |
| 184 | + back, err := gg.LoadImage(a.picfile) |
| 185 | + if err != nil { |
| 186 | + return nil, err |
| 187 | + } |
| 188 | + // 避免图片过大,最大 1280*720 |
| 189 | + back = imgfactory.Limit(back, 1280, 720) |
| 190 | + imgDX := back.Bounds().Dx() |
| 191 | + imgDY := back.Bounds().Dy() |
| 192 | + canvas := gg.NewContext(imgDX, imgDY) |
| 193 | + |
| 194 | + // draw background |
| 195 | + canvas.DrawImage(back, 0, 0) |
| 196 | + |
| 197 | + // Create smaller Aero Style boxes |
| 198 | + createAeroBox := func(x, y, width, height float64) { |
| 199 | + aeroStyle := gg.NewContext(int(width), int(height)) |
| 200 | + aeroStyle.DrawRoundedRectangle(0, 0, width, height, 8) |
| 201 | + aeroStyle.SetLineWidth(2) |
| 202 | + aeroStyle.SetRGBA255(255, 255, 255, 100) |
| 203 | + aeroStyle.StrokePreserve() |
| 204 | + aeroStyle.SetRGBA255(255, 255, 255, 140) |
| 205 | + aeroStyle.Fill() |
| 206 | + canvas.DrawImage(aeroStyle.Image(), int(x), int(y)) |
| 207 | + } |
| 208 | + |
| 209 | + // draw aero boxes for text |
| 210 | + createAeroBox(20, float64(imgDY-120), 280, 100) // left bottom |
| 211 | + createAeroBox(float64(imgDX-272), float64(imgDY-60), 252, 40) // right bottom |
| 212 | + |
| 213 | + // draw info(name, coin, etc) |
| 214 | + hourWord := getHourWord(time.Now()) |
| 215 | + canvas.SetRGB255(0, 0, 0) |
| 216 | + data, err := file.GetLazyData(text.MaokenFontFile, control.Md5File, true) |
| 217 | + if err != nil { |
| 218 | + return nil, err |
| 219 | + } |
| 220 | + if err = canvas.ParseFontFace(data, 24); err != nil { |
| 221 | + return nil, err |
| 222 | + } |
| 223 | + getNameLengthWidth, _ := canvas.MeasureString(a.nickname) |
| 224 | + // draw aero box |
| 225 | + if getNameLengthWidth > 140 { |
| 226 | + createAeroBox(20, 40, 140+getNameLengthWidth, 100) // left top |
| 227 | + } else { |
| 228 | + createAeroBox(20, 40, 280, 100) // left top |
| 229 | + } |
| 230 | + |
| 231 | + // draw avatar |
| 232 | + avatar, _, err := image.Decode(bytes.NewReader(getAvatar)) |
| 233 | + if err != nil { |
| 234 | + return nil, err |
| 235 | + } |
| 236 | + avatarf := imgfactory.Size(avatar, 100, 100) |
| 237 | + canvas.DrawImage(avatarf.Circle(0).Image(), 30, 20) |
| 238 | + |
| 239 | + canvas.DrawString(a.nickname, 140, 80) |
| 240 | + canvas.DrawStringAnchored(hourWord, 140, 120, 0, 0) |
| 241 | + |
| 242 | + if err = canvas.ParseFontFace(data, 20); err != nil { |
| 243 | + return nil, err |
| 244 | + } |
| 245 | + canvas.DrawStringAnchored("ATRI币 + "+strconv.Itoa(a.inc), 40, float64(imgDY-90), 0, 0) |
| 246 | + canvas.DrawStringAnchored("当前ATRI币:"+strconv.Itoa(a.score), 40, float64(imgDY-60), 0, 0) |
| 247 | + canvas.DrawStringAnchored("LEVEL: "+strconv.Itoa(getrank(a.level)), 40, float64(imgDY-30), 0, 0) |
| 248 | + |
| 249 | + // Draw Info(Time, etc.) |
| 250 | + getTime := time.Now().Format("2006-01-02 15:04:05") |
| 251 | + canvas.DrawStringAnchored(getTime, float64(imgDX)-146, float64(imgDY)-40, 0.5, 0.5) // time |
| 252 | + var nextrankScore int |
| 253 | + if a.rank < 10 { |
| 254 | + nextrankScore = rankArray[a.rank+1] |
| 255 | + } else { |
| 256 | + nextrankScore = SCOREMAX |
| 257 | + } |
| 258 | + nextLevelStyle := strconv.Itoa(a.level) + "/" + strconv.Itoa(nextrankScore) |
| 259 | + canvas.DrawStringAnchored(nextLevelStyle, 190, float64(imgDY-30), 0, 0) // time |
| 260 | + |
| 261 | + // Draw Zerobot-Plugin information |
| 262 | + canvas.SetRGB255(255, 255, 255) |
| 263 | + if err = canvas.ParseFontFace(data, 20); err != nil { |
| 264 | + return nil, err |
| 265 | + } |
| 266 | + canvas.DrawStringAnchored("Created By Zerobot-Plugin "+banner.Version, float64(imgDX)/2, float64(imgDY)-20, 0.5, 0.5) // zbp |
| 267 | + canvas.SetRGB255(0, 0, 0) |
| 268 | + canvas.DrawStringAnchored("Created By Zerobot-Plugin "+banner.Version, float64(imgDX)/2-3, float64(imgDY)-19, 0.5, 0.5) // zbp |
| 269 | + canvas.SetRGB255(255, 255, 255) |
| 270 | + return canvas.Image(), nil |
| 271 | +} |
0 commit comments