URI: 
       Fix transparency problem when converting 32-bit images to WebP - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 8f40f34cd10a98598bb822ec633fd5d0ea64b612
   DIR parent 8ddbc95466e2702ca192acc0950e6fce45b313a8
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Wed,  7 Jul 2021 09:34:39 +0200
       
       Fix transparency problem when converting 32-bit images to WebP
       
       Fixes #8729
       
       Diffstat:
         M resources/image_test.go             |      51 ++++++++++++++++++++++++++++++-
         M resources/images/image.go           |      14 +++++++++++++-
         M resources/images/webp/webp.go       |       5 +++++
         M resources/images/webp/webp_notavai… |       5 +++++
         A resources/testdata/fuzzy-cirlcle.p… |       0 
         M resources/testdata/golden/gohugoio… |       0 
         M resources/testdata/golden/gohugoio… |       0 
         M resources/testdata/golden/gohugoio… |       0 
         M resources/testdata/golden/gohugoio… |       0 
         M resources/testdata/golden/gohugoio… |       0 
         M resources/testdata/golden/gopher-h… |       0 
         M resources/testdata/golden/gopher-h… |       0 
         M resources/testdata/golden/gopher-h… |       0 
         M resources/testdata/golden/gradient… |       0 
         M resources/testdata/golden/gradient… |       0 
         M resources/testdata/golden/sunset_h… |       0 
         A resources/testdata/golden_webp/fuz… |       0 
       
       17 files changed, 73 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/resources/image_test.go b/resources/image_test.go
       @@ -28,6 +28,8 @@ import (
                "testing"
                "time"
        
       +        "github.com/gohugoio/hugo/resources/images/webp"
       +
                "github.com/gohugoio/hugo/common/paths"
        
                "github.com/spf13/afero"
       @@ -550,6 +552,47 @@ func goldenEqual(img1, img2 *image.NRGBA) bool {
                return true
        }
        
       +// Issue #8729
       +func TestImageOperationsGoldenWebp(t *testing.T) {
       +        if !webp.Supports() {
       +                t.Skip("skip webp test")
       +        }
       +        c := qt.New(t)
       +        c.Parallel()
       +
       +        devMode := false
       +
       +        testImages := []string{"fuzzy-cirlcle.png"}
       +
       +        spec, workDir := newTestResourceOsFs(c)
       +        defer func() {
       +                if !devMode {
       +                        os.Remove(workDir)
       +                }
       +        }()
       +
       +        if devMode {
       +                fmt.Println(workDir)
       +        }
       +
       +        for _, imageName := range testImages {
       +                image := fetchImageForSpec(spec, c, imageName)
       +                imageWebp, err := image.Resize("200x webp")
       +                c.Assert(err, qt.IsNil)
       +                c.Assert(imageWebp.Width(), qt.Equals, 200)
       +        }
       +
       +        if devMode {
       +                return
       +        }
       +
       +        dir1 := filepath.Join(workDir, "resources/_gen/images")
       +        dir2 := filepath.FromSlash("testdata/golden_webp")
       +
       +        assetGoldenDirs(c, dir1, dir2)
       +
       +}
       +
        func TestImageOperationsGolden(t *testing.T) {
                c := qt.New(t)
                c.Parallel()
       @@ -658,6 +701,12 @@ func TestImageOperationsGolden(t *testing.T) {
                dir1 := filepath.Join(workDir, "resources/_gen/images")
                dir2 := filepath.FromSlash("testdata/golden")
        
       +        assetGoldenDirs(c, dir1, dir2)
       +
       +}
       +
       +func assetGoldenDirs(c *qt.C, dir1, dir2 string) {
       +
                // The two dirs above should now be the same.
                dirinfos1, err := ioutil.ReadDir(dir1)
                c.Assert(err, qt.IsNil)
       @@ -692,7 +741,7 @@ func TestImageOperationsGolden(t *testing.T) {
                                        "gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_300x200_fill_gaussian_smart1_2.png":
                                        c.Log("expectedly differs from golden due to dithering:", fi1.Name())
                                default:
       -                                t.Errorf("resulting image differs from golden: %s", fi1.Name())
       +                                c.Errorf("resulting image differs from golden: %s", fi1.Name())
                                }
                        }
        
   DIR diff --git a/resources/images/image.go b/resources/images/image.go
       @@ -17,6 +17,7 @@ import (
                "fmt"
                "image"
                "image/color"
       +        "image/draw"
                "image/gif"
                "image/jpeg"
                "image/png"
       @@ -236,7 +237,18 @@ func (p *ImageProcessor) ApplyFiltersFromConfig(src image.Image, conf ImageConfi
        
        func (p *ImageProcessor) Filter(src image.Image, filters ...gift.Filter) (image.Image, error) {
                g := gift.New(filters...)
       -        dst := image.NewRGBA(g.Bounds(src.Bounds()))
       +        bounds := g.Bounds(src.Bounds())
       +        var dst draw.Image
       +        switch src.(type) {
       +        case *image.RGBA:
       +                dst = image.NewRGBA(bounds)
       +        case *image.NRGBA:
       +                dst = image.NewNRGBA(bounds)
       +        case *image.Gray:
       +                dst = image.NewGray(bounds)
       +        default:
       +                dst = image.NewNRGBA(bounds)
       +        }
                g.Draw(dst, src)
                return dst, nil
        }
   DIR diff --git a/resources/images/webp/webp.go b/resources/images/webp/webp.go
       @@ -28,3 +28,8 @@ import (
        func Encode(w io.Writer, m image.Image, o webpoptions.EncodingOptions) error {
                return libwebp.Encode(w, m, o)
        }
       +
       +// Supports returns whether webp encoding is supported in this build.
       +func Supports() bool {
       +        return true
       +}
   DIR diff --git a/resources/images/webp/webp_notavailable.go b/resources/images/webp/webp_notavailable.go
       @@ -28,3 +28,8 @@ import (
        func Encode(w io.Writer, m image.Image, o webpoptions.EncodingOptions) error {
                return herrors.ErrFeatureNotAvailable
        }
       +
       +// Supports returns whether webp encoding is supported in this build.
       +func Supports() bool {
       +        return false
       +}
   DIR diff --git a/resources/testdata/fuzzy-cirlcle.png b/resources/testdata/fuzzy-cirlcle.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gohugoio24_huc57dd738f4724f4b341121e66fd85555_267952_300x200_fill_gaussian_smart1_2.png b/resources/testdata/golden/gohugoio24_huc57dd738f4724f4b341121e66fd85555_267952_300x200_fill_gaussian_smart1_2.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gohugoio24_huc57dd738f4724f4b341121e66fd85555_267952_3ad578dd67cd055b4382e4062918d0a2.png b/resources/testdata/golden/gohugoio24_huc57dd738f4724f4b341121e66fd85555_267952_3ad578dd67cd055b4382e4062918d0a2.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_300x200_fill_gaussian_smart1_2.png b/resources/testdata/golden/gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_300x200_fill_gaussian_smart1_2.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_8544b956dc08b714975ae52d4dcfdd78.png b/resources/testdata/golden/gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_8544b956dc08b714975ae52d4dcfdd78.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_b4afd8d32218a87ed1f7e351368501c3.png b/resources/testdata/golden/gohugoio8_hu7f72c00afdf7634587afaa5eff2a25b2_73538_b4afd8d32218a87ed1f7e351368501c3.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gopher-hero8_huaa0cd7d2cfc14ff32a57f171896f2285_13327_200x0_resize_bge3e615_box_2.png b/resources/testdata/golden/gopher-hero8_huaa0cd7d2cfc14ff32a57f171896f2285_13327_200x0_resize_bge3e615_box_2.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gopher-hero8_huaa0cd7d2cfc14ff32a57f171896f2285_13327_200x0_resize_q75_bge3e615_box_2.jpg b/resources/testdata/golden/gopher-hero8_huaa0cd7d2cfc14ff32a57f171896f2285_13327_200x0_resize_q75_bge3e615_box_2.jpg
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gopher-hero8_huaa0cd7d2cfc14ff32a57f171896f2285_13327_30x0_resize_box_2.png b/resources/testdata/golden/gopher-hero8_huaa0cd7d2cfc14ff32a57f171896f2285_13327_30x0_resize_box_2.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gradient-circle_huf3d35257a40a8d6f525263a856c5ecfd_20069_200x0_resize_bge3e615_box_2.png b/resources/testdata/golden/gradient-circle_huf3d35257a40a8d6f525263a856c5ecfd_20069_200x0_resize_bge3e615_box_2.png
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/gradient-circle_huf3d35257a40a8d6f525263a856c5ecfd_20069_200x0_resize_q75_bge3e615_box_2.jpg b/resources/testdata/golden/gradient-circle_huf3d35257a40a8d6f525263a856c5ecfd_20069_200x0_resize_q75_bge3e615_box_2.jpg
       Binary files differ.
   DIR diff --git a/resources/testdata/golden/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_da536a2a5436e387d0d482675e08ad48.jpg b/resources/testdata/golden/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_da536a2a5436e387d0d482675e08ad48.jpg
       Binary files differ.
   DIR diff --git a/resources/testdata/golden_webp/fuzzy-cirlcle_hu525d1a6cf670e85f5e8f19890241399b_26792_200x0_resize_q75_h2_box_2.webp b/resources/testdata/golden_webp/fuzzy-cirlcle_hu525d1a6cf670e85f5e8f19890241399b_26792_200x0_resize_q75_h2_box_2.webp
       Binary files differ.