package filters import ( "image" "image/draw" "image/color" "github.com/disintegration/gift" ) type PosterizeFilter struct { Depth uint8 } func Posterize(depth uint8) gift.Filter { return PosterizeFilter{depth} } func (filter PosterizeFilter) Bounds(src image.Rectangle) (dst_bounds image.Rectangle) { return src } func bin(c uint8) uint8 { if c <= 64 { return 0 } else { return 255 } } func (filter PosterizeFilter) Draw(dst draw.Image, src image.Image, _ *gift.Options) { bounds := src.Bounds() for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { from := src.At(x, y) c := from.(color.NRGBA) c.R = bin(c.R) c.G = bin(c.G) c.B = bin(c.B) dst.Set(x, y, c) } } }