🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# package draw `import "image/draw"` draw包提供了图像合成函数。参见:[http://golang.org/doc/articles/image_draw.html](http://golang.org/doc/articles/image_draw.html) ## Index * [type Quantizer](#Quantizer) * [type Image](#Image) * [type Drawer](#Drawer) * [type Op](#Op) * [func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)](#Op.Draw) * [func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)](#Draw) * [func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op)](#DrawMask) ## type [Quantizer](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L26 "View Source") ``` type Quantizer interface { // Quantize方法向p中最多增加cap(p)-len(p)个色彩并返回修正后的调色板 // 返回值更适合(可以更少失真的)将m转换为一个调色板类型的图像 Quantize(p color.Palette, m image.Image) color.Palette } ``` Quantizer接口为一个图像生成调色板。 ## type [Image](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L20 "View Source") ``` type Image interface { image.Image Set(x, y int, c color.Color) } ``` Image接口比image.Image接口多了Set方法,该方法用于修改单个像素的色彩。 ## type [Drawer](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L49 "View Source") ``` type Drawer interface { // 对齐图像dst的r.Min和src的sp点,然后将src绘制到dst上的结果来替换矩形范围内的图像 Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) } ``` Drawer包含Draw方法。 ``` var FloydSteinberg Drawer = floydSteinberg{} ``` FloydSteinberg是采用Src操作并实现了Floyd-Steinberg误差扩散算法的Drawer。 ## type [Op](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L33 "View Source") ``` type Op int ``` Op是Porter-Duff合成的操作符。 ``` const ( // 源图像透过遮罩后,覆盖在目标图像上(类似图层) Over Op = iota // 源图像透过遮罩后,替换掉目标图像 Src ) ``` ### func (Op) [Draw](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L44 "View Source") ``` func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) ``` Draw方法通过使用Op参数调用包的Draw函数实现了Drawer接口。 ## func [Draw](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L97 "View Source") ``` func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op) ``` Draw函数使用nil的mask参数调用DrawMask函数。 ## func [DrawMask](https://github.com/golang/go/blob/master/src/image/draw/draw.go#L103 "View Source") ``` func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op) ``` 对齐目标图像dst的矩形r左上角、源图像src的sp点、遮罩mask的mp点,根据op修改dst的r矩形区域内的内容,mask如果为nil则视为完全透明。