-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathquant_test.go
106 lines (102 loc) · 3.16 KB
/
quant_test.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
package quant_test
import (
"fmt"
"image"
"image/color"
"image/draw"
"image/png"
"os"
"path/filepath"
"runtime"
"testing"
"github.com/soniakeys/quant"
"github.com/soniakeys/quant/median"
)
// TestDither tests Sierra24A on png files found in the source directory.
// Output files are prefixed with _dither_256_. Files beginning with _
// are skipped when scanning for input files. Thus nothing is tested
// with a fresh source tree--drop a png or two in the source directory
// before testing to give the test something to work on.
func TestDitherMedianDraw(t *testing.T) {
_, file, _, _ := runtime.Caller(0)
srcDir, _ := filepath.Split(file)
// ignore file names starting with _, those are result files.
imgs, err := filepath.Glob(srcDir + "[^_]*.png")
if err != nil {
t.Fatal(err)
}
const n = 256
// exercise draw.Quantizer interface
var q draw.Quantizer = median.Quantizer(n)
// exercise draw.Drawer interface
var d draw.Drawer = quant.Sierra24A{}
for _, p := range imgs {
f, err := os.Open(p)
if err != nil {
t.Error(err) // skip files that can't be opened
continue
}
img, err := png.Decode(f)
f.Close()
if err != nil {
t.Error(err) // skip files that can't be decoded
continue
}
pDir, pFile := filepath.Split(p)
// prefix _ on file name marks this as a result
fq, err := os.Create(fmt.Sprintf("%s_dither_median_draw_%d_%s", pDir, n, pFile))
if err != nil {
t.Fatal(err) // probably can't create any others
}
b := img.Bounds()
pi := image.NewPaletted(b, q.Quantize(make(color.Palette, 0, n), img))
d.Draw(pi, b, img, b.Min)
if err = png.Encode(fq, pi); err != nil {
t.Fatal(err) // any problem is probably a problem for all
}
}
}
// TestDither tests Sierra24A on png files found in the source directory.
// Output files are prefixed with _dither_256_. Files beginning with _
// are skipped when scanning for input files. Thus nothing is tested
// with a fresh source tree--drop a png or two in the source directory
// before testing to give the test something to work on.
func TestDitherMedianPalette(t *testing.T) {
_, file, _, _ := runtime.Caller(0)
srcDir, _ := filepath.Split(file)
// ignore file names starting with _, those are result files.
imgs, err := filepath.Glob(srcDir + "[^_]*.png")
if err != nil {
t.Fatal(err)
}
const n = 256
// exercise draw.Quantizer interface
var q draw.Quantizer = median.Quantizer(n)
// exercise draw.Drawer interface
var d draw.Drawer = quant.Sierra24A{}
for _, p := range imgs {
f, err := os.Open(p)
if err != nil {
t.Error(err) // skip files that can't be opened
continue
}
img, err := png.Decode(f)
f.Close()
if err != nil {
t.Error(err) // skip files that can't be decoded
continue
}
pDir, pFile := filepath.Split(p)
// prefix _ on file name marks this as a result
fq, err := os.Create(fmt.Sprintf("%s_dither_median_palette_%d_%s", pDir, n, pFile))
if err != nil {
t.Fatal(err) // probably can't create any others
}
b := img.Bounds()
pi := image.NewPaletted(b, q.Quantize(make(color.Palette, 0, n), img))
d.Draw(pi, b, img, b.Min)
if err = png.Encode(fq, pi); err != nil {
t.Fatal(err) // any problem is probably a problem for all
}
}
}