Golang如何从矩形jpeg中裁剪出圆形图像。

In Golang how do you crop a circular image out of a rectangular jpeg. The rectangle can vary in size. If you have an image.Image would you crop out a circle from the center of the image where the circle takes up as much space as possible? I want to keep the circle and remove the rest.

This example using the drawing package from the golang blog should do roughly what you want;

type circle struct {
    p image.Point
    r int
}

func (c *circle) ColorModel() color.Model {
    return color.AlphaModel
}

func (c *circle) Bounds() image.Rectangle {
    return image.Rect(c.p.X-c.r, c.p.Y-c.r, c.p.X+c.r, c.p.Y+c.r)
}

func (c *circle) At(x, y int) color.Color {
    xx, yy, rr := float64(x-c.p.X)+0.5, float64(y-c.p.Y)+0.5, float64(c.r)
    if xx*xx+yy*yy < rr*rr {
        return color.Alpha{255}
    }
    return color.Alpha{0}
}

    draw.DrawMask(dst, dst.Bounds(), src, image.ZP, &circle{p, r}, image.ZP, draw.Over)

Note that it takes a rectangle and masks everything but the circle beginning at point p with radius r. The full article can be found here http://blog.golang.org/go-imagedraw-package

In your case you would like the mask to just be your normal background and the src to be the currently rectangular image you'd like to use part of.