(uid int64, equipInfo equip, articles []article)
| 199 | } |
| 200 | |
| 201 | func drawPackImage(uid int64, equipInfo equip, articles []article) (imagePicByte []byte, err error) { |
| 202 | fontdata, err := file.GetLazyData(text.BoldFontFile, control.Md5File, true) |
| 203 | if err != nil { |
| 204 | return nil, err |
| 205 | } |
| 206 | var ( |
| 207 | wg sync.WaitGroup |
| 208 | equipBlock image.Image // 装备信息 |
| 209 | packBlock image.Image // 背包信息 |
| 210 | ) |
| 211 | wg.Add(1) |
| 212 | // 绘制ID |
| 213 | go func() { |
| 214 | defer wg.Done() |
| 215 | if equipInfo == (equip{}) { |
| 216 | equipBlock, err = drawEquipEmptyBlock(fontdata) |
| 217 | } else { |
| 218 | equipBlock, err = drawEquipInfoBlock(equipInfo, fontdata) |
| 219 | } |
| 220 | if err != nil { |
| 221 | return |
| 222 | } |
| 223 | }() |
| 224 | wg.Add(1) |
| 225 | // 绘制基本信息 |
| 226 | go func() { |
| 227 | defer wg.Done() |
| 228 | if len(articles) == 0 { |
| 229 | packBlock, err = drawArticleEmptyBlock(fontdata) |
| 230 | } else { |
| 231 | packBlock, err = drawArticleInfoBlock(uid, articles, fontdata) |
| 232 | } |
| 233 | if err != nil { |
| 234 | return |
| 235 | } |
| 236 | }() |
| 237 | wg.Wait() |
| 238 | if equipBlock == nil || packBlock == nil { |
| 239 | err = errors.New("生成图片失败,数据缺失") |
| 240 | return |
| 241 | } |
| 242 | // 计算图片高度 |
| 243 | backDX := 1020 |
| 244 | backDY := 10 + equipBlock.Bounds().Dy() + 10 + packBlock.Bounds().Dy() + 10 |
| 245 | canvas := gg.NewContext(backDX, backDY) |
| 246 | |
| 247 | // 画底色 |
| 248 | canvas.DrawRectangle(0, 0, float64(backDX), float64(backDY)) |
| 249 | canvas.SetRGBA255(150, 150, 150, 255) |
| 250 | canvas.Fill() |
| 251 | canvas.DrawRectangle(10, 10, float64(backDX-20), float64(backDY-20)) |
| 252 | canvas.SetRGBA255(255, 255, 255, 255) |
| 253 | canvas.Fill() |
| 254 | |
| 255 | canvas.DrawImage(equipBlock, 10, 10) |
| 256 | canvas.DrawImage(packBlock, 10, 10+equipBlock.Bounds().Dy()+10) |
| 257 | |
| 258 | return factory.ToBytes(canvas.Image()) |
no test coverage detected