resource: Use Floyd-Steinberg dithering for PNGs
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 26 Feb 2018 17:55:00 +0000 (18:55 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 26 Feb 2018 18:44:36 +0000 (19:44 +0100)
Fixes #4453

resource/image.go
resource/image_test.go

index 2529413cc9038695a2309392ea173994f440ce83..7dae99333d626b27136cd3b6475b9f80203b2fe2 100644 (file)
@@ -80,7 +80,7 @@ var (
        // Add or increment if changes to an image format's processing requires
        // re-generation.
        imageFormatsVersions = map[imaging.Format]int{
-               imaging.PNG: 1, // 1: Add proper palette handling
+               imaging.PNG: 2, // Floyd Steinberg dithering
        }
 
        // Increment to mark all processed images as stale. Only use when absolutely needed.
@@ -266,7 +266,7 @@ func (i *Image) doWithImageConfig(action, spec string, f func(src image.Image, c
                        // Apply the colour palette from the source
                        if paletted, ok := src.(*image.Paletted); ok {
                                tmp := image.NewPaletted(converted.Bounds(), paletted.Palette)
-                               draw.Src.Draw(tmp, tmp.Bounds(), converted, converted.Bounds().Min)
+                               draw.FloydSteinberg.Draw(tmp, tmp.Bounds(), converted, converted.Bounds().Min)
                                converted = tmp
                        }
                }
index 03cd1726f28c6a19d2d7ded7d6619ba88ee6f303..7906f4fbca25e7bff2382bfc3b49c7cd0cb182f2 100644 (file)
@@ -273,7 +273,7 @@ func TestImageResize8BitPNG(t *testing.T) {
        resized, err := image.Resize("800x")
        assert.NoError(err)
        assert.Equal(imaging.PNG, resized.format)
-       assert.Equal("/a/gohugoio_hu0e1b9e4a4be4d6f86c7b37b9ccce3fbc_73886_800x0_resize_linear_1.png", resized.RelPermalink())
+       assert.Equal("/a/gohugoio_hu0e1b9e4a4be4d6f86c7b37b9ccce3fbc_73886_800x0_resize_linear_2.png", resized.RelPermalink())
        assert.Equal(800, resized.Width())
 
 }