Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions common/loggers/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ func LevelLoggerToWriter(l logg.LevelLogger) io.Writer {

type Logger interface {
Debug() logg.LevelLogger
DebugCommand(command string) logg.LevelLogger
Debugf(format string, v ...any)
Debugln(v ...any)
Error() logg.LevelLogger
Expand Down Expand Up @@ -221,6 +222,10 @@ func (l *logAdapter) Debug() logg.LevelLogger {
return l.debugl
}

func (l *logAdapter) DebugCommand(command string) logg.LevelLogger {
return l.debugl.WithField(FieldNameCmd, command)
}

func (l *logAdapter) Debugf(format string, v ...any) {
l.debugl.Logf(format, v...)
}
Expand Down
30 changes: 27 additions & 3 deletions resources/images/codec.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"io"

"github.com/bep/imagemeta"
"github.com/bep/logg"
"github.com/gohugoio/hugo/common/himage"
"golang.org/x/image/bmp"
"golang.org/x/image/tiff"
Expand Down Expand Up @@ -56,14 +57,23 @@ type EncodeDecoder interface {

// Codec is a generic image codec supporting multiple formats.
type Codec struct {
webp EncodeDecoder
webp EncodeDecoder
debugl logg.LevelLogger
}

func newCodec(webp EncodeDecoder) *Codec {
return &Codec{webp: webp}
func newCodec(webp EncodeDecoder, debugl logg.LevelLogger) *Codec {
return &Codec{webp: webp, debugl: debugl}
}

func (d *Codec) EncodeTo(conf ImageConfig, w io.Writer, img image.Image) error {
d.debugl.Log(
// This construct looks odd, but the func will only be called if debug is enabled.
logg.StringFunc(
func() string {
return fmt.Sprintf("Encoding image to format %s with config %+v", conf.TargetFormat, conf)
},
),
)
switch conf.TargetFormat {
case JPEG:
var rgba *image.RGBA
Expand Down Expand Up @@ -144,6 +154,13 @@ func (d *Codec) EncodeTo(conf ImageConfig, w io.Writer, img image.Image) error {
}

func (d *Codec) DecodeFormat(f Format, r io.Reader) (image.Image, error) {
d.debugl.Log(
logg.StringFunc(
func() string {
return fmt.Sprintf("Decoding image from format %s", f)
},
),
)
switch f {
case JPEG, PNG:
// We reworked this decode/encode setup to get full WebP support in v0.153.0.
Expand Down Expand Up @@ -192,6 +209,13 @@ func (d *Codec) DecodeFormat(f Format, r io.Reader) (image.Image, error) {
}

func (d *Codec) Decode(r io.Reader) (image.Image, error) {
d.debugl.Log(
logg.StringFunc(
func() string {
return "Decoding image from unknown format"
},
),
)
rr := toPeekReader(r)
format, err := formatFromImage(rr)
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions resources/images/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ func (i *Image) initConfig() error {
return nil
}

func NewImageProcessor(warnl logg.LevelLogger, wasmDispatchers *warpc.Dispatchers, cfg *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal]) (*ImageProcessor, error) {
func NewImageProcessor(debugl, warnl logg.LevelLogger, wasmDispatchers *warpc.Dispatchers, cfg *config.ConfigNamespace[ImagingConfig, ImagingConfigInternal]) (*ImageProcessor, error) {
e := cfg.Config.Imaging.Exif
exifDecoder, err := meta.NewDecoder(
meta.WithDateDisabled(e.DisableDate),
Expand Down Expand Up @@ -154,7 +154,7 @@ func NewImageProcessor(warnl logg.LevelLogger, wasmDispatchers *warpc.Dispatcher
if webpCodec == nil {
return nil, errors.New("webp codec is not available")
}
imageCodec := newCodec(webpCodec)
imageCodec := newCodec(webpCodec, debugl)

return &ImageProcessor{
Cfg: cfg,
Expand Down
3 changes: 2 additions & 1 deletion resources/resource_spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,10 @@ func NewSpec(
conf := s.Cfg.GetConfig().(*allconfig.Config)
imgConfig := conf.Imaging

imagesDebugl := logger.DebugCommand("images")
imagesWarnl := logger.WarnCommand("images")

imaging, err := images.NewImageProcessor(imagesWarnl, wasmDispatchers, imgConfig)
imaging, err := images.NewImageProcessor(imagesDebugl, imagesWarnl, wasmDispatchers, imgConfig)
if err != nil {
return nil, err
}
Expand Down