Skip to content

Instantly share code, notes, and snippets.

@amlwwalker
Created September 23, 2016 11:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amlwwalker/a3ee1639dc5e32fad8a16aa085524917 to your computer and use it in GitHub Desktop.
Save amlwwalker/a3ee1639dc5e32fad8a16aa085524917 to your computer and use it in GitHub Desktop.
Handlers for imagemagick posting byte array and manipulating
import (
"github.com/astaxie/beego"
"gopkg.in/gographics/imagick.v2/imagick"
"encoding/json"
"log"
)
type ImageController struct {
beego.Controller
}
type Image struct {
Data []byte `json:"data"`
}
func (this *ImageController) Get() {
this.Ctx.WriteString("image")
}
func (this *ImageController) Post() {
var i Image
json.Unmarshal(this.Ctx.Input.RequestBody, &i)
log.Println("processing... ", i.Data)
im, _ := processContactImage(0, i.Data)
this.Data["json"] = im
this.ServeJSON()
}
func processContactImage(idx int, image []byte) ([]byte, error) {
// log.Println("idx: ", idx)
mw := imagick.NewMagickWand()
log.Println("reading image blob: ", image)
err := mw.ReadImageBlob(image)
if err != nil {
log.Println("reading blob failed: ", err)
return []byte{}, err
}
log.Println("resize image")
err = mw.ResizeImage(400, 400, imagick.FILTER_LANCZOS, 1)
if err != nil {
log.Println("resizing image failed: ", err)
return []byte{}, err
}
log.Println("compressing image")
err = mw.SetImageCompressionQuality(95)
if err != nil {
log.Println("compressing image failed")
return []byte{}, err
}
dw := imagick.NewDrawingWand()
cw := imagick.NewPixelWand()
dw.SetStrokeOpacity(1)
dw.PushDrawingWand()
cw.SetColor("red")
dw.SetStrokeColor(cw)
dw.SetStrokeWidth(25)
dw.SetStrokeAntialias(true)
cw.SetColor("none")
//dw.SetStrokeOpacity(1)
dw.SetFillColor(cw)
log.Println("drawing circle on image")
dw.Circle(200,200,275,50)
cw.SetColor("white")
dw.SetStrokeColor(cw)
dw.SetStrokeWidth(120)
dw.SetStrokeAntialias(true)
cw.SetColor("none")
//dw.SetStrokeOpacity(1)
dw.SetFillColor(cw)
dw.Circle(200,200,380,50)
err = mw.DrawImage(dw)
if err != nil {
log.Println("failed to draw image")
return []byte{}, err
}
newImage := mw.GetImageBlob()
return newImage, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment