-
Notifications
You must be signed in to change notification settings - Fork 0
/
cropper.go
115 lines (94 loc) · 2.49 KB
/
cropper.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
package handlers
import (
"bytes"
"encoding/json"
"fmt"
"image/png"
"io/ioutil"
"net/http"
mgc "github.com/mh-cbon/mdl-go-components"
"github.com/mh-cbon/mdl-go-components/components"
"github.com/vincent-petithory/dataurl"
)
func Cropper(w http.ResponseWriter, r *http.Request) {
data := &viewData{
Title: "Cropper",
Components: make([]mgc.ViewComponentRenderer, 0),
}
var line *components.Slice
var t1 *components.Cropper
var form *components.Form
// -
line = components.NewSlice()
t1 = components.NewCropper()
t1.SetCurrentImg("/static/avatar-1.png")
t1.SetName("result")
t1.SetLabel("base64 result")
form = components.NewForm()
form.AddComponent(t1)
form.SetMethod("POST")
form.SetAction("/cropper_post")
form.AddHidden("result_type").SetValue("base64")
form.AddSubmit("vv").SetLabel("Submit")
line.AddComponent(form)
data.Components = append(data.Components, line)
// -
line = components.NewSlice()
t1 = components.NewCropper()
t1.SetCurrentImg("/static/avatar-1.png")
t1.SetName("result")
t1.SetResultMode("geometry")
t1.SetLabel("geometry result")
form = components.NewForm()
form.AddComponent(t1)
form.SetMethod("POST")
form.SetAction("/cropper_post")
form.AddHidden("result_type").SetValue("geometry")
form.AddSubmit("vv").SetLabel("Submit")
line.AddComponent(form)
data.Components = append(data.Components, line)
//- add an example to show how to manage the response on the server side
// -
renderComponents(w, data)
}
func CropperPost(w http.ResponseWriter, r *http.Request) {
// we will just print out the interesting data
// and demo the interesting code
// then return to /cropper
r.ParseForm()
result := r.Form.Get("result")
result_type := r.Form.Get("result_type")
fmt.Println(result_type)
if result_type == "base64" {
fmt.Println(result[0:50])
dataURL, err := dataurl.DecodeString(result)
if err != nil {
panic(err)
}
fmt.Println(dataURL.ContentType())
var b bytes.Buffer
b.Write(dataURL.Data)
config, err := png.DecodeConfig(&b)
if err != nil {
panic(err)
}
fmt.Println(config)
b.Truncate(0)
b.Write(dataURL.Data)
img, err := png.Decode(&b)
if err != nil {
panic(err)
}
// write the file
png.Encode(ioutil.Discard, img)
} else if result_type == "geometry" {
fmt.Println(result)
geo := &components.GeometryResult{}
if err := json.Unmarshal([]byte(result), geo); err != nil {
panic(err)
}
fmt.Println(geo)
// rest is up to you !
}
http.Redirect(w, r, "/cropper", http.StatusSeeOther)
}