func (pr *BimgProcessor) Process(buffer []byte, geo btcdn.GeoBox) (img btcdn.Image, err error) { bimgImg := bimg.NewImage(buffer) var newImage []byte gravity := resolveGravity(geo.Gravity()) if geo.Cropped() && geo.Resized() { newImage, err = resizeAndCrop(bimgImg, geo.Width(), geo.Height(), gravity) } else if geo.Resized() { if geo.Mode() == "!" { newImage, err = forceResize(bimgImg, geo.Width(), geo.Height()) } else { newImage, err = resize(bimgImg, geo.Width()) } } else if geo.Cropped() { newImage, err = crop(bimgImg, int(float64(geo.Offset()[1])), int(float64(geo.Offset()[0])), geo.Width(), geo.Height()) } if geo.Greyscale() { newImage, err = bimgImg.Colourspace(bimg.INTERPRETATION_B_W) } img = &Image{ body: newImage, mime: Mimes[bimgImg.Type()], } return }
func (pr *MagickProcessor) Process(buffer []byte, geo btcdn.GeoBox) (img btcdn.Image, err error) { mw := imagick.NewMagickWand() // Schedule cleanup defer mw.Destroy() err = mw.ReadImageBlob(buffer) if err != nil { return } if geo.Cropped() && geo.Resized() { err = resize(mw, geo) if err != nil { return } err = crop(mw, geo) if err != nil { return } } else if geo.Resized() { err = resize(mw, geo) if err != nil { return } } else if geo.Cropped() { err = crop(mw, geo) if err != nil { return } } if geo.Greyscale() { err = mw.SetColorspace(imagick.COLORSPACE_GRAY) } err = mw.SetImageFormat("jpg") if err != nil { return } err = mw.SetImageCompressionQuality(80) if err != nil { return } err = mw.StripImage() if err != nil { return } newImage := mw.GetImageBlob() img = &Image{ body: newImage, mime: "image/jpeg", } return }