]> Cypherpunks repositories - gostls13.git/commitdiff
image/png: improve compression by skipping filter for paletted images
authorOliver Tonnhofer <olt@bogosoft.com>
Tue, 27 Sep 2016 13:24:00 +0000 (15:24 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 27 Sep 2016 14:01:20 +0000 (14:01 +0000)
Compression of paletted images is more efficient if they are not filtered.
This patch skips filtering for cbP8 images.
The improvements are demonstrated at https://github.com/olt/compressbench

Fixes #16196

Change-Id: Ie973aad287cacf9057e394bb01cf0e4448a77618
Reviewed-on: https://go-review.googlesource.com/29872
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/image/png/writer.go

index df23270ee975cdcb8b5b38b986a902a02a8b2f40..dd87d81629196002f12a6a4a83476cf9ee0c7c09 100644 (file)
@@ -420,8 +420,11 @@ func writeImage(w io.Writer, m image.Image, cb int, level int) error {
                }
 
                // Apply the filter.
+               // Skip filter for NoCompression and paletted images (cbP8) as
+               // "filters are rarely useful on palette images" and will result
+               // in larger files (see http://www.libpng.org/pub/png/book/chapter09.html).
                f := ftNone
-               if level != zlib.NoCompression {
+               if level != zlib.NoCompression && cb != cbP8 {
                        f = filter(&cr, pr, bpp)
                }