package pipelines import ( "errors" "fmt" "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 } // Flip image type FlipImageStep struct { Step Options struct { Direction string `json:"direction"` } `json:"options"` } func (s FlipImageStep) Execute(src image.Image) (image.Image, error) { switch s.Options.Direction { case "h": src = imaging.FlipH(src) case "v": src = imaging.FlipH(src) default: return src, errors.New(fmt.Sprintf("invalid flip direction: %s", s.Options.Direction)) } 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 }