forked from RobWC/riotapi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstatic_images.go
135 lines (123 loc) · 3.64 KB
/
static_images.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package riotapi
import (
"bytes"
"encoding/base64"
"fmt"
"image"
"image/draw"
"image/jpeg"
"image/png"
"io/ioutil"
"net/http"
)
// Image image construct for static images
type Image struct {
Full string `json:"full"`
Sprite string `json:"sprite"`
Group string `json:"group"`
X int `json:"x"`
Y int `json:"y"`
W int `json:"w"`
H int `json:"h"`
Encoded string
}
// FetchSprite return the sprite of the image
func (i *Image) FetchSprite(version string) (image.Image, error) {
resp, err := http.Get(fmt.Sprintf("http://ddragon.leagueoflegends.com/cdn/%s/img/sprite/%s", version, i.Sprite))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if (resp.StatusCode == 200) && (resp.Header.Get("Content-Type") == "image/png") {
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
buf := bytes.NewBuffer(data)
img, err := png.Decode(buf)
if err != nil {
return nil, err
}
m := image.NewRGBA(image.Rect(0, 0, i.W, i.H))
draw.Draw(m, m.Bounds(), img, image.Point{X: i.X, Y: i.Y}, draw.Src)
return m, err
}
return nil, fmt.Errorf("Error fetching image %s response code %d", i.Full, resp.StatusCode)
}
// Fetch fetch the full image
func (i *Image) Fetch(version string) (image.Image, error) {
resp, err := http.Get(fmt.Sprintf("http://ddragon.leagueoflegends.com/cdn/%s/img/%s/%s", version, i.Group, i.Full))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if (resp.StatusCode == 200) && (resp.Header.Get("Content-Type") == "image/png") {
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
buf := bytes.NewBuffer(data)
img, err := png.Decode(buf)
if err != nil {
return nil, err
}
return img, err
}
return nil, fmt.Errorf("Error fetching image %s response code %d", i.Full, resp.StatusCode)
}
// EncodeImage return image as encoded in base64
func (i *Image) EncodeImage(version string) (string, error) {
img, err := i.Fetch(version)
if err != nil {
return "", err
}
buff := new(bytes.Buffer)
err = jpeg.Encode(buff, img, nil)
if err != nil {
return "", err
}
i.Encoded = base64.StdEncoding.EncodeToString(buff.Bytes())
return i.Encoded, nil
}
// FetchChampLoadingImage fetch the loading image for a Champion with specified skin
func FetchChampLoadingImage(n string, s int) (image.Image, error) {
resp, err := http.Get(fmt.Sprintf("http://ddragon.leagueoflegends.com/cdn/img/champion/loading/%s_%d.jpg", n, s))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
buf := bytes.NewBuffer(data)
img, err := jpeg.Decode(buf)
if err != nil {
return nil, err
}
return img, err
}
return nil, fmt.Errorf("Error fetching image for champ %s and skin %d response code %d", n, s, resp.StatusCode)
}
// FetchChampSplashImage fetch the splash image for a Champion with specified skin
func FetchChampSplashImage(n string, s int) (image.Image, error) {
resp, err := http.Get(fmt.Sprintf("http://ddragon.leagueoflegends.com/cdn/img/champion/splash/%s_%d.jpg", n, s))
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
buf := bytes.NewBuffer(data)
img, err := jpeg.Decode(buf)
if err != nil {
return nil, err
}
return img, err
}
return nil, fmt.Errorf("Error fetching image for champ %s and skin %d response code %d", n, s, resp.StatusCode)
}