You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
980 B
51 lines
980 B
package pipelines
|
|
|
|
import (
|
|
"github.com/disintegration/imaging"
|
|
"image"
|
|
)
|
|
|
|
type IExecutableStep interface {
|
|
Execute(src image.Image) (image.Image, error)
|
|
}
|
|
|
|
// Resize image
|
|
|
|
type ResizeImageStep struct {
|
|
Step
|
|
Options struct {
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
Upscale bool `json:"upscale"`
|
|
} `json:"options"`
|
|
}
|
|
|
|
func (s ResizeImageStep) Execute(src image.Image) (image.Image, error) {
|
|
src = imaging.Resize(src, s.Options.Width, s.Options.Height, imaging.Linear)
|
|
return src, nil
|
|
}
|
|
|
|
// Rotate image
|
|
|
|
type RotateImageStep struct {
|
|
Step
|
|
Options struct {
|
|
Angle float64 `json:"angle"`
|
|
} `json:"options"`
|
|
}
|
|
|
|
func (s RotateImageStep) Execute(src image.Image) (image.Image, error) {
|
|
src = imaging.Rotate(src, s.Options.Angle, image.Black)
|
|
return src, nil
|
|
}
|
|
|
|
// Grayscale image
|
|
|
|
type GrayscaleImageStep struct {
|
|
Step
|
|
}
|
|
|
|
func (s GrayscaleImageStep) Execute(src image.Image) (image.Image, error) {
|
|
src = imaging.Grayscale(src)
|
|
return src, nil
|
|
}
|