bild icon indicating copy to clipboard operation
bild copied to clipboard

transform.Crop performance goes bad when rect size is small

Open Sora233 opened this issue 4 years ago • 0 comments

my result is below.

goos: linux
goarch: amd64
pkg: test
cpu: AMD Ryzen 7 3700X 8-Core Processor
BenchmarkMyCrop-16                 14307             79645 ns/op
BenchmarkResizeCrop-16               134           8771603 ns/op

my test code is below.

const size = 50

func BenchmarkMyCrop(b *testing.B) {
	f, err := ioutil.ReadFile("img.png")
	if err != nil {
		panic(err)
	}
	dImage, _, err := image.Decode(bytes.NewReader(f))
	if err != nil {
		panic(err)
	}
	rect := image.Rect(0, 0, size, size)

	SubImage := func (img image.Image, r image.Rectangle) image.Image {
		var bgSize = image.Rect(0, 0, r.Dx(), r.Dy())
		var bg = image.NewNRGBA(bgSize)
		draw.Draw(bg, bg.Bounds(), img, r.Min, draw.Src)
		return bg
	}
	for i := 0; i < b.N; i++ {
		SubImage(dImage, rect)
	}
}

func BenchmarkResizeCrop(b *testing.B) {
	f, err := ioutil.ReadFile("img.png")
	if err != nil {
		panic(err)
	}
	dImage, _, err := image.Decode(bytes.NewReader(f))
	if err != nil {
		panic(err)
	}
	rect := image.Rect(0, 0, size, size)
	for i := 0; i < b.N; i++ {
		transform.Crop(dImage, rect)
	}
}

my test image is below.

img

Sora233 avatar Aug 22 '21 16:08 Sora233