type Logger interface {
Debug() logg.LevelLogger
+ DebugCommand(command string) logg.LevelLogger
Debugf(format string, v ...any)
Debugln(v ...any)
Error() 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...)
}
"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"
// 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
}
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.
}
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 {
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),
if webpCodec == nil {
return nil, errors.New("webp codec is not available")
}
- imageCodec := newCodec(webpCodec)
+ imageCodec := newCodec(webpCodec, debugl)
return &ImageProcessor{
Cfg: cfg,
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
}