Improved Resize() and added tests
This commit is contained in:
parent
a6df8adeba
commit
9bc240fc71
|
@ -8,7 +8,18 @@ import (
|
||||||
"github.com/oliamb/cutter"
|
"github.com/oliamb/cutter"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Resize(width, height uint, img image.Image) image.Image {
|
func Resize(size uint, img image.Image) image.Image {
|
||||||
|
var width, height uint
|
||||||
|
|
||||||
|
switch{
|
||||||
|
case img.Bounds().Max.X == img.Bounds().Max.Y:
|
||||||
|
width, height = size, size
|
||||||
|
case img.Bounds().Max.X > img.Bounds().Max.Y:
|
||||||
|
width, height = 0, size
|
||||||
|
default:
|
||||||
|
width, height = size, 0
|
||||||
|
}
|
||||||
|
|
||||||
return resize.Resize(width, height, img, resize.Bilinear)
|
return resize.Resize(width, height, img, resize.Bilinear)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,91 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestResize(t *testing.T) {
|
func TestResize(t *testing.T) {
|
||||||
|
sizes := []uint{80, 240, 1000}
|
||||||
|
|
||||||
|
cs := []struct{
|
||||||
|
Filename string
|
||||||
|
Bounds map[uint]image.Rectangle
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"elephant.jpg",
|
||||||
|
map[uint]image.Rectangle{
|
||||||
|
80: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 80, Y: 80},
|
||||||
|
},
|
||||||
|
240: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 240, Y: 240},
|
||||||
|
},
|
||||||
|
1000: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 1000, Y: 1000},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rose.webp",
|
||||||
|
map[uint]image.Rectangle{
|
||||||
|
80: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 107, Y: 80},
|
||||||
|
},
|
||||||
|
240: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 319, Y: 240},
|
||||||
|
},
|
||||||
|
1000: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 1329, Y: 1000},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spin.gif",
|
||||||
|
map[uint]image.Rectangle{
|
||||||
|
80: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 80, Y: 80},
|
||||||
|
},
|
||||||
|
240: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 240, Y: 240},
|
||||||
|
},
|
||||||
|
1000: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 1000, Y: 1000},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"status.png",
|
||||||
|
map[uint]image.Rectangle{
|
||||||
|
80: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 80, Y: 80},
|
||||||
|
},
|
||||||
|
240: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 240, Y: 240},
|
||||||
|
},
|
||||||
|
1000: {
|
||||||
|
Min: image.Point{X: 0, Y: 0},
|
||||||
|
Max: image.Point{X: 1000, Y: 1000},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cs {
|
||||||
|
img, err := Decode(path + c.Filename)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
for _, s := range sizes {
|
||||||
|
rsImg := Resize(s, img)
|
||||||
|
require.Exactly(t, c.Bounds[s], rsImg.Bounds())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCrop(t *testing.T) {
|
func TestCrop(t *testing.T) {
|
||||||
|
@ -39,7 +123,7 @@ func TestCrop(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cs := []struct{
|
cs := []struct{
|
||||||
FileName string
|
Filename string
|
||||||
Params []params
|
Params []params
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
|
@ -77,7 +161,7 @@ func TestCrop(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range cs {
|
for _, c := range cs {
|
||||||
img, err := Decode(path + c.FileName)
|
img, err := Decode(path + c.Filename)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
for _, p := range c.Params {
|
for _, p := range c.Params {
|
||||||
|
@ -88,8 +172,8 @@ func TestCrop(t *testing.T) {
|
||||||
} else {
|
} else {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
require.Exactly(t, p.OutputBound.Dx(), cImg.Bounds().Dx(), c.FileName)
|
require.Exactly(t, p.OutputBound.Dx(), cImg.Bounds().Dx(), c.Filename)
|
||||||
require.Exactly(t, p.OutputBound.Dy(), cImg.Bounds().Dy(), c.FileName)
|
require.Exactly(t, p.OutputBound.Dy(), cImg.Bounds().Dy(), c.Filename)
|
||||||
|
|
||||||
bb := bytes.NewBuffer([]byte{})
|
bb := bytes.NewBuffer([]byte{})
|
||||||
err = Encode(bb, cImg, options)
|
err = Encode(bb, cImg, options)
|
||||||
|
|
Loading…
Reference in New Issue