diff --git a/src/imgserver/engine/image_engine.go b/src/imgserver/engine/image_engine.go index a789ce1..712444d 100644 --- a/src/imgserver/engine/image_engine.go +++ b/src/imgserver/engine/image_engine.go @@ -1,16 +1,16 @@ package engine import ( - "errors" "imgserver/object" "imgserver/response" - Logger "github.com/labstack/gommon/log" + //Logger "github.com/labstack/gommon/log" + "gopkg.in/h2non/bimg.v1" ) type ImageEngine struct { - parent *response.Response Input []byte + parent *response.Response } func NewImageEngine (res *response.Response) *ImageEngine { @@ -18,11 +18,14 @@ func NewImageEngine (res *response.Response) *ImageEngine { } func (self *ImageEngine) Process(obj *object.FileObject) (*response.Response, error) { - - for i, trans := range obj.Transforms { - Logger.Infof("Permoring i = %d trans = %s", i, trans.Name) - } - return response.NewError(400, errors.New("Not ready")), errors.New("Not ready") + image := bimg.NewImage(self.Input) + buf, err := image.Process(obj.Transforms.BimgOptions()) + if err != nil { + return response.NewError(500, err), err + } + res := response.New(200, buf) + res.SetContentType("image/" + bimg.DetermineImageTypeName(buf)) + return res, nil } diff --git a/src/imgserver/object/file_object.go b/src/imgserver/object/file_object.go index dfe27f2..7391aa6 100644 --- a/src/imgserver/object/file_object.go +++ b/src/imgserver/object/file_object.go @@ -18,25 +18,25 @@ const ( var URI_LIIP_RE = regexp.MustCompile(`\/media\/cache\/.*`) var URI_LOCAL_RE = regexp.MustCompile(`\/media\/.*`) -func liipToTransform(liip config.LiipFiltersYAML ) ([]transforms.Base, transforms.Param) { +func liipToTransform(liip config.LiipFiltersYAML ) (transforms.Transforms) { filters := liip.Filters - var trans []transforms.Base + var trans transforms.Transforms if len(filters.Thumbnail.Size) > 0 { - trans = append(trans, transforms.Base{Name: "resize", Params: map[string]interface{}{"size": filters.Thumbnail.Size, "mode": filters.Thumbnail.Mode}}) + trans.ResizeT(filters.Thumbnail.Size, filters.Thumbnail.Mode == "outbound") } if len(filters.SmartCrop.Size) > 0 { - trans = append(trans, transforms.Base{Name: "crop", Params: map[string]interface{}{"size": filters.SmartCrop.Size, "mode": filters.SmartCrop.Mode}}) + trans.CropT(filters.SmartCrop.Size, filters.SmartCrop.Mode == "outbound") } if len(filters.Crop.Size) > 0 { - trans = append(trans, transforms.Base{Name: "crop", Params: map[string]interface{}{"size": filters.Crop.Size, "mode": filters.Crop.Mode}}) + trans.CropT(filters.Crop.Size, filters.Crop.Mode == "outbound") } - param := transforms.Quailty{Value:liip.Quality} + trans.Quality = liip.Quality - return trans, param + return trans } @@ -46,8 +46,7 @@ type FileObject struct { Key string `json:"key"` UriType int `json:"uriType"` Parent string `json:"parent"` - Transforms []transforms.Base `json:"transforms"` - Params transforms.Param `json:"params"` + Transforms transforms.Transforms `json:"transforms"` } @@ -92,7 +91,7 @@ func (self *FileObject) decodeLiipPath() error { self.Key = strings.Replace(self.Uri, "//", "/", 3) self.Parent = "/" + strings.Join(elements[4:], "/") liipConfig := config.GetInstance().LiipConfig - self.Transforms, self.Params = liipToTransform(liipConfig[presetName]) + self.Transforms = liipToTransform(liipConfig[presetName]) } else { self.Key = self.Uri } diff --git a/src/imgserver/processor.go b/src/imgserver/processor.go index acfbaea..097809e 100644 --- a/src/imgserver/processor.go +++ b/src/imgserver/processor.go @@ -16,7 +16,7 @@ func Process(obj *object.FileObject) (*response.Response) { parent = storage.Get(obj.GetParent()) } - if len(obj.Transforms) == 0 && obj.Params == nil { + if obj.Transforms.NotEmpty == false { return storage.Get(obj) } diff --git a/src/imgserver/transforms/transforms.go b/src/imgserver/transforms/transforms.go index 3685c2e..9aafa37 100644 --- a/src/imgserver/transforms/transforms.go +++ b/src/imgserver/transforms/transforms.go @@ -1,8 +1,57 @@ package transforms -type Base struct { - Name string - Params map[string]interface{} +import "gopkg.in/h2non/bimg.v1" + +type Transforms struct { + Height int + Width int + AreaHeight int + AreaWidth int + Top int + Left int + Quality int + Compression int + Zoom int + Crop bool + Enlarge bool + Embed bool + Flip bool + Flop bool + Force bool + NoAutoRotate bool + NoProfile bool + Interlace bool + StripMetadata bool + Trim bool + + NotEmpty bool } +func (self *Transforms) ResizeT(size []int, enlarge bool) (*Transforms) { + self.Width = size[0] + self.Height = size[1] + self.Enlarge = enlarge + self.NotEmpty = true + return self +} + +func (self *Transforms) CropT(size []int, enlarge bool) (*Transforms) { + self.Width = size[0] + self.Height = size[1] + self.Enlarge = enlarge + self.Crop = true + self.NotEmpty = true + return self +} + +func (self *Transforms) BimgOptions() (bimg.Options) { + return bimg.Options{ + Width: self.Width, + Height: self.Height, + Enlarge: self.Enlarge, + Crop: self.Crop, + } +} + +