/
resize.go
96 lines (80 loc) · 1.79 KB
/
resize.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
package main
import (
"bytes"
"encoding/base64"
"errors"
"fmt"
"image"
"image/gif"
"image/jpeg"
"image/png"
"log"
"github.com/nfnt/resize"
)
func resize_img(req *Request, img *image.Image) image.Image {
var algorithm resize.InterpolationFunction
switch req.Algorithm {
case "NearestNeighbor":
algorithm = resize.NearestNeighbor
case "Bilinear":
algorithm = resize.Bilinear
case "Bicubic":
algorithm = resize.Bicubic
case "MitchellNetravali":
algorithm = resize.MitchellNetravali
case "Lanczos2":
algorithm = resize.Lanczos2
case "Lanczos3":
algorithm = resize.Lanczos3
default:
algorithm = resize.Lanczos3
}
return resize.Resize(req.Width, req.Height, *img, algorithm)
}
func decode_img(data []byte, content_type string) (*image.Image, error) {
var (
img image.Image
err error
)
buffer := bytes.NewBuffer(data)
switch content_type {
case "image/jpeg":
img, err = jpeg.Decode(buffer)
case "image/gif":
img, err = gif.Decode(buffer)
case "image/png":
img, err = png.Decode(buffer)
default:
err = errors.New("Unknown content type " + content_type)
}
if err != nil {
log.Println(err)
return nil, err
}
return &img, nil
}
func encode_img(img image.Image, content_type string) ([]byte, error) {
var (
buffer bytes.Buffer
err error
)
switch content_type {
case "image/jpeg":
err = jpeg.Encode(&buffer, img, nil)
case "image/gif":
err = gif.Encode(&buffer, img, nil)
case "image/png":
err = png.Encode(&buffer, img)
default:
err = errors.New("Unknown content type " + content_type)
}
if err != nil {
log.Println(err)
return nil, err
}
return buffer.Bytes(), nil
}
func base_64_encode(data []byte, content_type string) string {
return fmt.Sprintf("data:%s;base64,%s",
content_type, base64.StdEncoding.EncodeToString(data))
}