|
|
package pipelines
import ( "errors" "fmt" "image"
"github.com/disintegration/imaging" )
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 }
// Fit image
type FitImageStep struct { Step Options struct { Height int `json:"height"` Width int `json:"width"` } `json:"options"` }
func (s FitImageStep) Execute(src image.Image) (image.Image, error) { src = imaging.Fit(src, s.Options.Width, s.Options.Height, imaging.Lanczos) return src, nil }
// Invert image
type InvertImageStep struct { Step }
func (s InvertImageStep) Execute(src image.Image) (image.Image, error) { src = imaging.Invert(src) return src, nil }
|