(a *scdata)
| 184 | } |
| 185 | |
| 186 | func drawScore17(a *scdata) (image.Image, error) { |
| 187 | getAvatar, err := initPic(a.picfile, a.uid) |
| 188 | if err != nil { |
| 189 | return nil, err |
| 190 | } |
| 191 | back, err := fio.LoadImage(a.picfile) |
| 192 | if err != nil { |
| 193 | return nil, err |
| 194 | } |
| 195 | // 避免图片过大,最大 1280*720 |
| 196 | back = factory.Limit(back, 1280, 720) |
| 197 | imgDX := back.Bounds().Dx() |
| 198 | imgDY := back.Bounds().Dy() |
| 199 | canvas := gg.NewContext(imgDX, imgDY) |
| 200 | |
| 201 | // draw background |
| 202 | canvas.DrawImage(back, 0, 0) |
| 203 | |
| 204 | // Create smaller Aero Style boxes |
| 205 | createAeroBox := func(x, y, width, height float64) { |
| 206 | aeroStyle := gg.NewContext(int(width), int(height)) |
| 207 | aeroStyle.DrawRoundedRectangle(0, 0, width, height, 8) |
| 208 | aeroStyle.SetLineWidth(2) |
| 209 | aeroStyle.SetRGBA255(255, 255, 255, 100) |
| 210 | aeroStyle.StrokePreserve() |
| 211 | aeroStyle.SetRGBA255(255, 255, 255, 140) |
| 212 | aeroStyle.Fill() |
| 213 | canvas.DrawImage(aeroStyle.Image(), int(x), int(y)) |
| 214 | } |
| 215 | |
| 216 | // draw aero boxes for text |
| 217 | createAeroBox(20, float64(imgDY-120), 280, 100) // left bottom |
| 218 | createAeroBox(float64(imgDX-272), float64(imgDY-60), 252, 40) // right bottom |
| 219 | |
| 220 | // draw info(name, coin, etc) |
| 221 | hourWord := getHourWord(time.Now()) |
| 222 | canvas.SetRGB255(0, 0, 0) |
| 223 | data, err := file.GetLazyData(text.MaokenFontFile, control.Md5File, true) |
| 224 | if err != nil { |
| 225 | return nil, err |
| 226 | } |
| 227 | if err = canvas.ParseFontFace(data, 24); err != nil { |
| 228 | return nil, err |
| 229 | } |
| 230 | getNameLengthWidth, _ := canvas.MeasureString(a.nickname) |
| 231 | // draw aero box |
| 232 | if getNameLengthWidth > 140 { |
| 233 | createAeroBox(20, 40, 140+getNameLengthWidth, 100) // left top |
| 234 | } else { |
| 235 | createAeroBox(20, 40, 280, 100) // left top |
| 236 | } |
| 237 | |
| 238 | // draw avatar |
| 239 | avatar, _, err := image.Decode(bytes.NewReader(getAvatar)) |
| 240 | if err != nil { |
| 241 | return nil, err |
| 242 | } |
| 243 | avatarf := factory.Size(avatar, 100, 100) |
nothing calls this directly
no test coverage detected