...

Source file src/golang.org/x/image/tiff/writer_test.go

Documentation: golang.org/x/image/tiff

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package tiff
     6  
     7  import (
     8  	"bytes"
     9  	"image"
    10  	"io/ioutil"
    11  	"os"
    12  	"testing"
    13  )
    14  
    15  var roundtripTests = []struct {
    16  	filename string
    17  	opts     *Options
    18  }{
    19  	{"video-001.tiff", nil},
    20  	{"video-001-16bit.tiff", nil},
    21  	{"video-001-gray.tiff", nil},
    22  	{"video-001-gray-16bit.tiff", nil},
    23  	{"video-001-paletted.tiff", nil},
    24  	{"bw-packbits.tiff", nil},
    25  	{"video-001.tiff", &Options{Predictor: true}},
    26  	{"video-001.tiff", &Options{Compression: Deflate}},
    27  	{"video-001.tiff", &Options{Predictor: true, Compression: Deflate}},
    28  }
    29  
    30  func openImage(filename string) (image.Image, error) {
    31  	f, err := os.Open(testdataDir + filename)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	defer f.Close()
    36  	return Decode(f)
    37  }
    38  
    39  func TestRoundtrip(t *testing.T) {
    40  	for _, rt := range roundtripTests {
    41  		img, err := openImage(rt.filename)
    42  		if err != nil {
    43  			t.Fatal(err)
    44  		}
    45  
    46  		out := new(bytes.Buffer)
    47  		err = Encode(out, img, rt.opts)
    48  		if err != nil {
    49  			t.Fatal(err)
    50  		}
    51  
    52  		img2, err := Decode(&buffer{buf: out.Bytes()})
    53  		if err != nil {
    54  			t.Fatal(err)
    55  		}
    56  		compare(t, img, img2)
    57  	}
    58  }
    59  
    60  // TestRoundtrip2 tests that encoding and decoding an image whose
    61  // origin is not (0, 0) gives the same thing.
    62  func TestRoundtrip2(t *testing.T) {
    63  	m0 := image.NewRGBA(image.Rect(3, 4, 9, 8))
    64  	for i := range m0.Pix {
    65  		m0.Pix[i] = byte(i)
    66  	}
    67  	out := new(bytes.Buffer)
    68  	if err := Encode(out, m0, nil); err != nil {
    69  		t.Fatal(err)
    70  	}
    71  	m1, err := Decode(&buffer{buf: out.Bytes()})
    72  	if err != nil {
    73  		t.Fatal(err)
    74  	}
    75  	compare(t, m0, m1)
    76  }
    77  
    78  func TestUnsupported(t *testing.T) {
    79  	img := image.NewGray(image.Rect(0, 0, 1, 1))
    80  	out := new(bytes.Buffer)
    81  	err := Encode(out, img, &Options{Compression: LZW})
    82  	if err == nil {
    83  		t.Error("tiff.Encode(LZW): no error returned, expected an error")
    84  	}
    85  }
    86  
    87  func benchmarkEncode(b *testing.B, name string, pixelSize int) {
    88  	b.Helper()
    89  	img, err := openImage(name)
    90  	if err != nil {
    91  		b.Fatal(err)
    92  	}
    93  	s := img.Bounds().Size()
    94  	b.SetBytes(int64(s.X * s.Y * pixelSize))
    95  	b.ResetTimer()
    96  	for i := 0; i < b.N; i++ {
    97  		Encode(ioutil.Discard, img, nil)
    98  	}
    99  }
   100  
   101  func BenchmarkEncode(b *testing.B)         { benchmarkEncode(b, "video-001.tiff", 4) }
   102  func BenchmarkEncodePaletted(b *testing.B) { benchmarkEncode(b, "video-001-paletted.tiff", 1) }
   103  func BenchmarkEncodeGray(b *testing.B)     { benchmarkEncode(b, "video-001-gray.tiff", 1) }
   104  func BenchmarkEncodeGray16(b *testing.B)   { benchmarkEncode(b, "video-001-gray-16bit.tiff", 2) }
   105  func BenchmarkEncodeRGBA(b *testing.B)     { benchmarkEncode(b, "video-001.tiff", 4) }
   106  func BenchmarkEncodeRGBA64(b *testing.B)   { benchmarkEncode(b, "video-001-16bit.tiff", 8) }
   107  

View as plain text