mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-29 22:29:56 +02:00
Add images.Process filter
This allows for constructs like: ``` {{ $filters := slice (images.GaussianBlur 8) (images.Grayscale) (images.Process "jpg q30 resize 200x") }} {{ $img = $img | images.Filter $filters }} ``` Note that the `action` option in `images.Process` is optional (`resize` in the example above), so you can use the above to just set the target format, e.g.: ``` {{ $filters := slice (images.GaussianBlur 8) (images.Grayscale) (images.Process "jpg") }} {{ $img = $img | images.Filter $filters }} ``` Fixes #8439
This commit is contained in:
@@ -201,7 +201,7 @@ func (p *ImageProcessor) DecodeExif(r io.Reader) (*exif.ExifInfo, error) {
|
||||
return p.exifDecoder.Decode(r)
|
||||
}
|
||||
|
||||
func (p *ImageProcessor) ApplyFiltersFromConfig(src image.Image, conf ImageConfig) (image.Image, error) {
|
||||
func (p *ImageProcessor) FiltersFromConfig(src image.Image, conf ImageConfig) ([]gift.Filter, error) {
|
||||
var filters []gift.Filter
|
||||
|
||||
if conf.Rotate != 0 {
|
||||
@@ -246,6 +246,14 @@ func (p *ImageProcessor) ApplyFiltersFromConfig(src image.Image, conf ImageConfi
|
||||
default:
|
||||
|
||||
}
|
||||
return filters, nil
|
||||
}
|
||||
|
||||
func (p *ImageProcessor) ApplyFiltersFromConfig(src image.Image, conf ImageConfig) (image.Image, error) {
|
||||
filters, err := p.FiltersFromConfig(src, conf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(filters) == 0 {
|
||||
return p.resolveSrc(src, conf.TargetFormat), nil
|
||||
@@ -396,6 +404,15 @@ func imageConfigFromImage(img image.Image) image.Config {
|
||||
return image.Config{Width: b.Max.X, Height: b.Max.Y}
|
||||
}
|
||||
|
||||
// UnwrapFilter unwraps the given filter if it is a filter wrapper.
|
||||
func UnwrapFilter(in gift.Filter) gift.Filter {
|
||||
if f, ok := in.(filter); ok {
|
||||
return f.Filter
|
||||
}
|
||||
return in
|
||||
}
|
||||
|
||||
// ToFilters converts the given input to a slice of gift.Filter.
|
||||
func ToFilters(in any) []gift.Filter {
|
||||
switch v := in.(type) {
|
||||
case []gift.Filter:
|
||||
|
Reference in New Issue
Block a user