-
Notifications
You must be signed in to change notification settings - Fork 9
/
iiif-transform.go
109 lines (76 loc) · 2.21 KB
/
iiif-transform.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
package main
// ./bin/iiif-transform -config config.json -quality dither -size ,300 /usr/local/cooperhewitt/iiif/images/184512_5f7f47e5b3c66207_x.jpg /vagrant/test2.jpg
/*
Important: This is still wet paint. It works so long as you use it in a very particular way.
Namely reading individual files from disk and writing them back to disk. It might stay that
way. It might grow the ability to load files from other sources. I'm not sure yet...
(20160927/thisisaaronland)
*/
import (
"flag"
iiifconfig "github.com/thisisaaronland/go-iiif/config"
iiifimage "github.com/thisisaaronland/go-iiif/image"
iiiflevel "github.com/thisisaaronland/go-iiif/level"
iiifsource "github.com/thisisaaronland/go-iiif/source"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func main() {
var cfg = flag.String("config", "", "Path to a valid go-iiif config file")
var region = flag.String("region", "full", "")
var size = flag.String("size", "full", "")
var rotation = flag.String("rotation", "0", "")
var quality = flag.String("quality", "default", "")
var format = flag.String("format", "jpg", "")
flag.Parse()
// TO DO: validate args...
args := flag.Args()
infile := args[0]
outfile := args[1]
fname := filepath.Base(infile)
if *cfg == "" {
log.Fatal("Missing config file")
}
config, err := iiifconfig.NewConfigFromFile(*cfg)
if err != nil {
log.Fatal(err)
}
level, err := iiiflevel.NewLevelFromConfig(config, "http://127.0.0.1")
if err != nil {
log.Fatal(err)
}
transformation, err := iiifimage.NewTransformation(level, *region, *size, *rotation, *quality, *format)
if err != nil {
log.Fatal(err)
}
// TO DO : compare extension of infile to 'format'
if !transformation.HasTransformation() {
log.Fatal("No transformation")
}
body, err := ioutil.ReadFile(infile)
if err != nil {
log.Fatal(err)
}
source, err := iiifsource.NewMemorySource(body)
if err != nil {
log.Fatal(err)
}
image, err := iiifimage.NewImageFromConfigWithSource(config, source, fname)
if err != nil {
log.Fatal(err)
}
err = image.Transform(transformation)
if err != nil {
log.Fatal(err)
}
fh, err := os.Create(outfile)
if err != nil {
log.Fatal(err)
}
defer fh.Close()
fh.Write(image.Body())
fh.Sync()
os.Exit(0)
}