/
imageGetter.go
44 lines (40 loc) · 900 Bytes
/
imageGetter.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
package main
import (
"bytes"
"errors"
"fmt"
"github.com/golang/groupcache"
"github.com/nfnt/resize"
"os"
"image"
_ "image/gif"
"image/jpeg"
_ "image/png"
)
type widthLimitedImageGetter uint
func (g widthLimitedImageGetter) Get(ctx groupcache.Context, key string, dest groupcache.Sink) error {
files, ok := ctx.(map[string]string)
if !ok {
return errors.New("Context type wrong. (expecting map[string]string)")
}
filePath, ok := files[key]
if !ok {
return errors.New(fmt.Sprintf("Requested key (%s) does not exist.", key))
}
file, err := os.Open(filePath)
if err != nil {
return err
}
img, _, err := image.Decode(file)
file.Close()
if err != nil {
return err
}
resized := resize.Resize(uint(g), 0, img, resize.NearestNeighbor)
buf := bytes.NewBuffer(nil)
err = jpeg.Encode(buf, resized, nil)
if err != nil {
return err
}
return dest.SetBytes(buf.Bytes())
}