From: Rui Ueyama Date: Fri, 29 Aug 2014 07:17:48 +0000 (+1000) Subject: image/png: do not apply filters if level is NoCompression X-Git-Tag: go1.4beta1~634 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9f0b749ba57dc4e922c1d16919cde4b7f9813f58;p=gostls13.git image/png: do not apply filters if level is NoCompression PNG filters are applied to get better compression ratio. It does not make sense to apply them if we are not going to compress. LGTM=nigeltao R=nigeltao CC=golang-codereviews https://golang.org/cl/137830043 --- diff --git a/src/pkg/image/png/writer.go b/src/pkg/image/png/writer.go index 703aeec0a2..b1a70c79d3 100644 --- a/src/pkg/image/png/writer.go +++ b/src/pkg/image/png/writer.go @@ -417,7 +417,10 @@ func writeImage(w io.Writer, m image.Image, cb int, level int) error { } // Apply the filter. - f := filter(&cr, pr, bpp) + f := ftNone + if level != zlib.NoCompression { + f = filter(&cr, pr, bpp) + } // Write the compressed bytes. if _, err := zw.Write(cr[f]); err != nil { diff --git a/src/pkg/image/png/writer_test.go b/src/pkg/image/png/writer_test.go index 6a872e2749..d67a815698 100644 --- a/src/pkg/image/png/writer_test.go +++ b/src/pkg/image/png/writer_test.go @@ -81,20 +81,23 @@ func TestWriterLevels(t *testing.T) { m := image.NewNRGBA(image.Rect(0, 0, 100, 100)) var b1, b2 bytes.Buffer - var e1, e2 Encoder - - if err := e1.Encode(&b1, m); err != nil { + if err := (&Encoder{}).Encode(&b1, m); err != nil { t.Fatal(err) } - - e2.CompressionLevel = NoCompression - if err := e2.Encode(&b2, m); err != nil { + noenc := &Encoder{CompressionLevel: NoCompression} + if err := noenc.Encode(&b2, m); err != nil { t.Fatal(err) } if b2.Len() <= b1.Len() { t.Error("DefaultCompression encoding was larger than NoCompression encoding") } + if _, err := Decode(&b1); err != nil { + t.Error("cannot decode DefaultCompression") + } + if _, err := Decode(&b2); err != nil { + t.Error("cannot decode NoCompression") + } } func TestSubImage(t *testing.T) {