mirror of
https://github.com/gohugoio/hugo.git
synced 2026-08-24 15:28:54 +00:00
cf18b827e2
Also clean up and simplify the image config handling. Closes #14998
185 lines
5.2 KiB
Go
185 lines
5.2 KiB
Go
// Copyright 2024 The Hugo Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package images_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/bep/logg"
|
|
"github.com/gohugoio/hugo/htesting"
|
|
"github.com/gohugoio/hugo/hugolib"
|
|
)
|
|
|
|
func TestAutoOrient(t *testing.T) {
|
|
files := `
|
|
-- hugo.toml --
|
|
-- assets/rotate270.jpg --
|
|
sourcefilename: ../testdata/exif/orientation6.jpg
|
|
-- layouts/home.html --
|
|
{{ $img := resources.Get "rotate270.jpg" }}
|
|
W/H original: {{ $img.Width }}/{{ $img.Height }}
|
|
{{ $rotated := $img.Filter images.AutoOrient }}
|
|
W/H rotated: {{ $rotated.Width }}/{{ $rotated.Height }}
|
|
`
|
|
|
|
b := hugolib.Test(t, files)
|
|
b.AssertFileContent("public/index.html", "W/H original: 80/40\n\nW/H rotated: 40/80")
|
|
}
|
|
|
|
// Issue 12733.
|
|
func TestOrientationEq(t *testing.T) {
|
|
files := `
|
|
-- hugo.toml --
|
|
-- assets/rotate270.jpg --
|
|
sourcefilename: ../testdata/exif/orientation6.jpg
|
|
-- layouts/home.html --
|
|
{{ $img := resources.Get "rotate270.jpg" }}
|
|
{{ $orientation := $img.Exif.Tags.Orientation }}
|
|
Orientation: {{ $orientation }}|eq 6: {{ eq $orientation 6 }}|Type: {{ printf "%T" $orientation }}|
|
|
`
|
|
|
|
b := hugolib.Test(t, files)
|
|
b.AssertFileContent("public/index.html", "Orientation: 6|eq 6: true|")
|
|
}
|
|
|
|
func TestColorsIssue14453(t *testing.T) {
|
|
// Go changed their JPEG implementation in Go 1.26, so we cannot run this test on earlier versions. See https://go.dev/doc/go1.26#imagejpegpkgimagejpeg
|
|
if htesting.GoMinorVersion() < 26 {
|
|
t.Skip("Go 1.26+ required")
|
|
}
|
|
files := `
|
|
-- hugo.toml --
|
|
-- assets/sunset.jpg --
|
|
sourcefilename: ../testdata/sunset.jpg
|
|
-- layouts/home.html --
|
|
{{ $img := resources.Get "sunset.jpg" }}
|
|
{{ $img := $img.Fit "100x100" }}
|
|
{{ $img := $img.Filter (slice images.AutoOrient (images.Process "fit 100x100 webp")) -}}
|
|
{{ $colors := $img.Colors }}
|
|
Colors: {{ $colors }}|
|
|
`
|
|
tempDir := t.TempDir()
|
|
for range 2 {
|
|
b := hugolib.Test(t, files, hugolib.TestOptWithConfig(func(cfg *hugolib.IntegrationTestConfig) {
|
|
cfg.NeedsOsFS = true
|
|
cfg.WorkingDir = tempDir
|
|
}))
|
|
b.AssertFileContent("public/index.html", "Colors: [#2e2f33 #a69e94 #d29d59 #a26a3f #747c83 #7b848b]|")
|
|
|
|
}
|
|
}
|
|
|
|
func TestImageCropSmartKeepsTargetSizeIssue13688(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
files := `
|
|
-- hugo.toml --
|
|
disableKinds = ['page','rss','section','sitemap','taxonomy','term']
|
|
-- assets/sunset.jpg --
|
|
sourcefilename: ../testdata/sunset.jpg
|
|
-- layouts/home.html --
|
|
{{ with resources.Get "sunset.jpg" }}
|
|
Original: {{ .Width }}x{{ .Height }}|
|
|
{{- with .Crop "900x561 TopLeft" -}}
|
|
CropTopLeft: {{ .Width }}x{{ .Height }}|
|
|
{{- end -}}
|
|
{{- with .Crop "900x561 Smart" -}}
|
|
CropSmart: {{ .Width }}x{{ .Height }}|
|
|
{{- end -}}
|
|
{{ end }}
|
|
`
|
|
|
|
b := hugolib.Test(t, files)
|
|
|
|
b.AssertFileContent("public/index.html", "Original: 900x562|CropTopLeft: 900x561|CropSmart: 900x561|")
|
|
}
|
|
|
|
func TestImagingGlobalsDeprecated(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
files := `
|
|
-- hugo.toml --
|
|
[imaging]
|
|
quality = 70
|
|
hint = "picture"
|
|
compression = "lossless"
|
|
-- layouts/home.html --
|
|
Home.
|
|
`
|
|
|
|
b := hugolib.Test(t, files, hugolib.TestOptWithConfig(func(cfg *hugolib.IntegrationTestConfig) {
|
|
cfg.LogLevel = logg.LevelInfo
|
|
}))
|
|
|
|
b.AssertLogContains(
|
|
"project config key imaging.quality was deprecated in Hugo v0.163.0",
|
|
"project config key imaging.hint was deprecated in Hugo v0.163.0",
|
|
"project config key imaging.compression was deprecated in Hugo v0.163.0",
|
|
)
|
|
}
|
|
|
|
func BenchmarkImageResize(b *testing.B) {
|
|
files := `
|
|
-- content/p1/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p1/index.md --
|
|
-- content/p2/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p2/index.md --
|
|
-- content/p3/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p3/index.md --
|
|
-- content/p4/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p4/index.md --
|
|
-- content/p5/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p5/index.md --
|
|
-- content/p6/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p6/index.md --
|
|
-- content/p7/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p7/index.md --
|
|
-- content/p8/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p8/index.md --
|
|
-- content/p9/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p9/index.md --
|
|
-- content/p10/sunrise.jpg --
|
|
sourcefilename: ../../resources/testdata/sunrise.jpg
|
|
-- content/p10/index.md --
|
|
-- layouts/home.html --
|
|
Home.
|
|
-- layouts/page.html --
|
|
Page.
|
|
{{ $image := .Resources.Get "sunrise.jpg" }}
|
|
{{ ($image.Process "resize 200x200").Publish }}
|
|
|
|
`
|
|
|
|
cfg := hugolib.IntegrationTestConfig{
|
|
T: b,
|
|
TxtarString: files,
|
|
}
|
|
|
|
for b.Loop() {
|
|
b.StopTimer()
|
|
builder := hugolib.NewIntegrationTestBuilder(cfg).Init()
|
|
b.StartTimer()
|
|
builder.Build()
|
|
}
|
|
}
|