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
This commit is contained in:
Rui Ueyama 2014-08-29 17:17:48 +10:00 committed by Nigel Tao
parent 42486ffc5d
commit 9f0b749ba5
2 changed files with 13 additions and 7 deletions

View 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 {

View 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) {