282 lines
6.5 KiB
Go
282 lines
6.5 KiB
Go
package imaging
|
|
|
|
import (
|
|
"image"
|
|
"testing"
|
|
)
|
|
|
|
func TestResize(t *testing.T) {
|
|
td := []struct {
|
|
desc string
|
|
src image.Image
|
|
w, h int
|
|
f ResampleFilter
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Resize 2x2 1x1 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
1, 1,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{0x40, 0x40, 0x40, 0xc0},
|
|
},
|
|
},
|
|
{
|
|
"Resize 2x2 2x2 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
2, 2,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Resize 3x1 1x1 nearest",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 2, 0),
|
|
Stride: 3 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
1, 1,
|
|
NearestNeighbor,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{0x00, 0xff, 0x00, 0xff},
|
|
},
|
|
},
|
|
{
|
|
"Resize 2x2 0x4 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
0, 4,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 4, 4),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"Resize 2x2 4x0 linear",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
4, 0,
|
|
Linear,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 4, 4),
|
|
Stride: 4 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0xbf, 0x00, 0x00, 0xbf, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0x40, 0x00, 0x40, 0x30, 0x30, 0x10, 0x70, 0x8f, 0x10, 0x30, 0xcf, 0xbf, 0x00, 0x40, 0xff,
|
|
0x00, 0xbf, 0x00, 0xbf, 0x10, 0x8f, 0x30, 0xcf, 0x30, 0x30, 0x8f, 0xef, 0x40, 0x00, 0xbf, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0xbf, 0x40, 0xff, 0x00, 0x40, 0xbf, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, d := range td {
|
|
got := Resize(d.src, d.w, d.h, d.f)
|
|
want := d.want
|
|
if !compareNRGBA(got, want, 1) {
|
|
t.Errorf("test [%s] failed: %#v", d.desc, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFit(t *testing.T) {
|
|
td := []struct {
|
|
desc string
|
|
src image.Image
|
|
w, h int
|
|
f ResampleFilter
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Fit 2x2 1x10 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
1, 10,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{0x40, 0x40, 0x40, 0xc0},
|
|
},
|
|
},
|
|
{
|
|
"Fit 2x2 10x1 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
10, 1,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{0x40, 0x40, 0x40, 0xc0},
|
|
},
|
|
},
|
|
{
|
|
"Fit 2x2 10x10 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 1),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
10, 10,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, d := range td {
|
|
got := Fit(d.src, d.w, d.h, d.f)
|
|
want := d.want
|
|
if !compareNRGBA(got, want, 0) {
|
|
t.Errorf("test [%s] failed: %#v", d.desc, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestThumbnail(t *testing.T) {
|
|
td := []struct {
|
|
desc string
|
|
src image.Image
|
|
w, h int
|
|
f ResampleFilter
|
|
want *image.NRGBA
|
|
}{
|
|
{
|
|
"Thumbnail 6x2 1x1 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 5, 1),
|
|
Stride: 6 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
1, 1,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{0x40, 0x40, 0x40, 0xc0},
|
|
},
|
|
},
|
|
{
|
|
"Thumbnail 2x6 1x1 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 1, 5),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
|
|
0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
1, 1,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 1, 1),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{0x40, 0x40, 0x40, 0xc0},
|
|
},
|
|
},
|
|
{
|
|
"Thumbnail 1x3 2x2 box",
|
|
&image.NRGBA{
|
|
Rect: image.Rect(-1, -1, 0, 2),
|
|
Stride: 1 * 4,
|
|
Pix: []uint8{
|
|
0x00, 0x00, 0x00, 0x00,
|
|
0xff, 0x00, 0x00, 0xff,
|
|
0xff, 0xff, 0xff, 0xff,
|
|
},
|
|
},
|
|
2, 2,
|
|
Box,
|
|
&image.NRGBA{
|
|
Rect: image.Rect(0, 0, 2, 2),
|
|
Stride: 2 * 4,
|
|
Pix: []uint8{
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, d := range td {
|
|
got := Thumbnail(d.src, d.w, d.h, d.f)
|
|
want := d.want
|
|
if !compareNRGBA(got, want, 0) {
|
|
t.Errorf("test [%s] failed: %#v", d.desc, got)
|
|
}
|
|
}
|
|
}
|