|
@@ -1,25 +1,28 @@
|
1
|
1
|
package main
|
2
|
2
|
|
3
|
3
|
import (
|
|
4
|
+ "image"
|
|
5
|
+ "image/jpeg"
|
4
|
6
|
"log"
|
|
7
|
+ "net/http"
|
5
|
8
|
"os"
|
6
|
9
|
"path"
|
7
|
10
|
"plugin"
|
8
|
11
|
)
|
9
|
12
|
|
10
|
|
-func loadPlugin(path string) (func(string), error) {
|
|
13
|
+func loadPlugin(path string) (func(image.Image) image.Image, error) {
|
11
|
14
|
p, err := plugin.Open(path)
|
12
|
15
|
if err != nil {
|
13
|
16
|
return nil, err
|
14
|
17
|
}
|
15
|
|
- sayHello, err := p.Lookup("SayHello")
|
|
18
|
+ transform, err := p.Lookup("Transform")
|
16
|
19
|
if err != nil {
|
17
|
20
|
return nil, err
|
18
|
21
|
}
|
19
|
|
- return sayHello.(func(string)), nil
|
|
22
|
+ return transform.(func(image.Image) image.Image), nil
|
20
|
23
|
}
|
21
|
24
|
|
22
|
|
-func getPlugins(pluginDir string) ([]func(string), error) {
|
|
25
|
+func getPlugins(pluginDir string) ([]func(image.Image) image.Image, error) {
|
23
|
26
|
pDir, err := os.Open(pluginDir)
|
24
|
27
|
if err != nil {
|
25
|
28
|
return nil, err
|
|
@@ -29,7 +32,7 @@ func getPlugins(pluginDir string) ([]func(string), error) {
|
29
|
32
|
return nil, err
|
30
|
33
|
}
|
31
|
34
|
|
32
|
|
- var ret []func(string)
|
|
35
|
+ var ret []func(image.Image) image.Image
|
33
|
36
|
for _, pFile := range pFiles {
|
34
|
37
|
if pFile.IsDir() {
|
35
|
38
|
continue
|
|
@@ -45,14 +48,27 @@ func getPlugins(pluginDir string) ([]func(string), error) {
|
45
|
48
|
return ret, nil
|
46
|
49
|
}
|
47
|
50
|
|
48
|
|
-func main() {
|
49
|
|
- pluginDir := os.Args[1]
|
|
51
|
+func handler(w http.ResponseWriter, r *http.Request) {
|
|
52
|
+ fi, _ := os.Open("lca.jpg")
|
|
53
|
+ i, _ := jpeg.Decode(fi)
|
50
|
54
|
|
51
|
|
- ps, err := getPlugins(pluginDir)
|
|
55
|
+ plugins, err := getPlugins(pluginDir)
|
52
|
56
|
if err != nil {
|
53
|
57
|
panic(err)
|
54
|
58
|
}
|
55
|
|
- for _, p := range ps {
|
56
|
|
- p("Gildas")
|
|
59
|
+
|
|
60
|
+ for _, p := range plugins {
|
|
61
|
+ i = p(i)
|
57
|
62
|
}
|
|
63
|
+
|
|
64
|
+ jpeg.Encode(w, i, nil)
|
|
65
|
+}
|
|
66
|
+
|
|
67
|
+var pluginDir string
|
|
68
|
+
|
|
69
|
+func main() {
|
|
70
|
+ pluginDir = os.Args[1]
|
|
71
|
+
|
|
72
|
+ http.HandleFunc("/a.jpg", handler)
|
|
73
|
+ http.ListenAndServe(":8080", nil)
|
58
|
74
|
}
|