]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix .Width and .Height for animated gifs
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 14 Jun 2023 06:14:39 +0000 (08:14 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 14 Jun 2023 07:21:22 +0000 (09:21 +0200)
Fixes #11079

hugolib/integrationtest_builder.go
resources/image_test.go
resources/images/image.go
resources/integration_test.go

index 4993d922a549342cc426ff4fa1eeb93853c6f8f8..0daa766ac965f07c148f208e39ebd71828099c29 100644 (file)
@@ -299,10 +299,20 @@ func (s *IntegrationTestBuilder) initBuilder() error {
 
                isBinaryRe := regexp.MustCompile(`^(.*)(\.png|\.jpg)$`)
 
+               const dataSourceFilenamePrefix = "sourcefilename:"
+
                for _, f := range s.data.Files {
                        filename := filepath.Join(s.Cfg.WorkingDir, f.Name)
                        data := bytes.TrimSuffix(f.Data, []byte("\n"))
-                       if isBinaryRe.MatchString(filename) {
+                       datastr := strings.TrimSpace(string(data))
+                       if strings.HasPrefix(datastr, dataSourceFilenamePrefix) {
+                               // Read from file relative to tue current dir.
+                               var err error
+                               wd, _ := os.Getwd()
+                               filename := filepath.Join(wd, strings.TrimSpace(strings.TrimPrefix(datastr, dataSourceFilenamePrefix)))
+                               data, err = os.ReadFile(filename)
+                               s.Assert(err, qt.IsNil)
+                       } else if isBinaryRe.MatchString(filename) {
                                var err error
                                data, err = base64.StdEncoding.DecodeString(string(data))
                                s.Assert(err, qt.IsNil)
index 779bacf716c3b8415a333325db105e6b50acb5c4..de32f06282ceadb830edd254b54829aa6b90e8a3 100644 (file)
@@ -658,11 +658,12 @@ func TestImageOperationsGolden(t *testing.T) {
 
        // A simple Gif file (no animation).
        orig := fetchImageForSpec(spec, c, "gohugoio-card.gif")
-       for _, resizeSpec := range []string{"100x", "220x"} {
-               resized, err := orig.Resize(resizeSpec)
+       for _, width := range []int{100, 220} {
+               resized, err := orig.Resize(fmt.Sprintf("%dx", width))
                c.Assert(err, qt.IsNil)
                rel := resized.RelPermalink()
                c.Assert(rel, qt.Not(qt.Equals), "")
+               c.Assert(resized.Width(), qt.Equals, width)
        }
 
        // Animated GIF
index 530057d800eaf3a696d966c83eca64ea4e41f100..672e8578f2176e071b445fe880d5bee6d876f915 100644 (file)
@@ -377,6 +377,9 @@ type imageConfig struct {
 }
 
 func imageConfigFromImage(img image.Image) image.Config {
+       if giphy, ok := img.(Giphy); ok {
+               return giphy.GIF().Config
+       }
        b := img.Bounds()
        return image.Config{Width: b.Max.X, Height: b.Max.Y}
 }
index 92abcb612c6dafcfedcdfeba68208d6fcd5ef6c8..543c264dcf13179d67c69b0057e499ca860952b9 100644 (file)
@@ -34,15 +34,21 @@ title: "My Bundle"
 ---
 -- content/mybundle/pixel.png --
 iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==
+-- content/mybundle/giphy.gif --
+sourcefilename: testdata/giphy.gif
 -- layouts/foo.html --
 -- layouts/index.html --
 {{ $p := site.GetPage "mybundle"}}
 {{ $img := $p.Resources.Get "pixel.png" }}
-{{ $gif := $img.Resize "1x1 gif" }}
-{{ $bmp := $img.Resize "1x1 bmp" }}
+{{ $giphy := $p.Resources.Get "giphy.gif" }}
+{{ $gif := $img.Resize "1x2 gif" }}
+{{ $bmp := $img.Resize "2x3 bmp" }}
+{{ $anigif := $giphy.Resize "4x5" }}
 
-gif: {{ $gif.RelPermalink }}|{{ $gif.MediaType }}|
-bmp: {{ $bmp.RelPermalink }}|{{ $bmp.MediaType }}|     
+
+gif: {{ $gif.RelPermalink }}|}|{{ $gif.Width }}|{{ $gif.Height }}|{{ $gif.MediaType }}|
+bmp: {{ $bmp.RelPermalink }}|}|{{ $bmp.Width }}|{{ $bmp.Height }}|{{ $bmp.MediaType }}|
+anigif: {{ $anigif.RelPermalink }}|{{ $anigif.Width }}|{{ $anigif.Height }}|{{ $anigif.MediaType }}|
 `
 
        b := hugolib.NewIntegrationTestBuilder(
@@ -55,9 +61,9 @@ bmp: {{ $bmp.RelPermalink }}|{{ $bmp.MediaType }}|
 
        assertImages := func() {
                b.AssertFileContent("public/index.html", `
-               gif: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_1x1_resize_box_3.gif|image/gif|
-               bmp: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_1x1_resize_box_3.bmp|image/bmp|
-               
+               gif: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_1x2_resize_box_3.gif|}|1|2|image/gif|
+               bmp: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_2x3_resize_box_3.bmp|}|2|3|image/bmp|
+               anigif: /mybundle/giphy_hu3eafc418e52414ace6236bf1d31f82e1_52213_4x5_resize_box_1.gif|4|5|image/gif|
                `)
        }