]> Cypherpunks repositories - gostls13.git/commitdiff
image/png: do not apply filters if level is NoCompression
authorRui Ueyama <ruiu@google.com>
Fri, 29 Aug 2014 07:17:48 +0000 (17:17 +1000)
committerNigel Tao <nigeltao@golang.org>
Fri, 29 Aug 2014 07:17:48 +0000 (17:17 +1000)
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

src/pkg/image/png/writer.go
src/pkg/image/png/writer_test.go

index 703aeec0a227b8fb1db3a20c41d0a2720163b2ee..b1a70c79d3f83b54b465a449697c8d328ba168c1 100644 (file)
@@ -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 {
index 6a872e2749493d5bc76103bd8107fef749e039a7..d67a815698fd0e75358b92b0257e88a45f0ee574 100644 (file)
@@ -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) {