image
image实现了基本的2D图片库。
基本接口叫作Image。图片的色彩定义在image/color包。
Image接口可以通过调用如NewRGBA和NewPaletted函数等获得;也可以通过调用Decode函数解码包含GIF、JPEG或PNG格式图像数据的输入流获得。解码任何具体图像类型之前都必须注册对应类型的解码函数。注册过程一般是作为包初始化的副作用,放在包的init函数里。因此,要解码PNG图像,只需在程序的main包里嵌入如下代码:
import _ "image/png"
_表示导入包但不使用包中的变量/函数/类型,只是为了包初始化函数的副作用。
参见http://golang.org/doc/articles/image_package.html
Variables
var (
// Black是一个完全不透明的面积无限大的黑色图像
Black = NewUniform(color.Black)
// White是一个完全不透明的面积无限大的白色图像
White = NewUniform(color.White)
// Transparent是一个完全透明的面积无限大的图像
Transparent = NewUniform(color.Transparent)
// Opaque是一个完全不透明的面积无限大的图像
Opaque = NewUniform(color.Opaque)
)
var ErrFormat = errors.New("image: unknown format")
ErrFormat说明解码时遇到了未知的格式。
type Image
type Image interface {
// ColorModel方法返回图像的色彩模型
ColorModel() color.Model
// Bounds方法返回图像的范围,范围不一定包括点(0, 0)
Bounds() Rectangle
// At方法返回(x, y)位置的色彩
// At(Bounds().Min.X, Bounds().Min.Y)返回网格左上角像素的色彩
// At(Bounds().Max.X-1, Bounds().Max.Y-1) 返回网格右下角像素的色彩
At(x, y int) color.Color
}
Image接口表示一个采用某色彩模型的颜色构成的有限矩形网格(即一幅图像)。
func Decode
func Decode(r io.Reader) (Image, string, error)
DecodeConfig函数解码并返回一个采用某种已注册格式编码的图像。字符串返回值是该格式注册时的名字。格式一般是在该编码格式的包的init函数中注册的。
type PalettedImage
type PalettedImage interface {
// ColorIndexAt方法返回(x, y)位置的像素的(调色板)索引
ColorIndexAt(x, y int) uint8
Image
}
PalettedImage接口代表一幅图像,它的像素可能来自一个有限的调色板。
如果有对象m满足PalettedImage接口,且m.ColorModel()返回的color.Model接口底层为一个Palette类型值(记为p),则m.At(x, y)返回值应等于p[m.ColorIndexAt(x, y)]。如果m的色彩模型不是Palette,则ColorIndexAt的行为是不确定的。
type Config
type Config struct {
ColorModel color.Model
Width, Height int
}
Config保管图像的色彩模型和尺寸信息。
func DecodeConfig
func DecodeConfig(r io.Reader) (Config, string, error)
DecodeConfig函数解码并返回一个采用某种已注册格式编码的图像的色彩模型和尺寸。字符串返回值是该格式注册时的名字。格式一般是在该编码格式的包的init函数中注册的。
func RegisterFormat
func RegisterFormat(name, magic string, decode func(io.Reader) (Image, error), decodeConfig func(io.Reader) (Config, error))
RegisterFormat注册一个供Decode函数使用的图片格式。name是格式的名字,如"jpeg"或"png";magic是该格式编码的魔术前缀,该字符串可以包含"?"通配符,每个通配符匹配一个字节;decode函数用于解码图片;decodeConfig函数只解码图片的配置。
type Point
type Point struct {
X, Y int
}
Point是X, Y坐标对。坐标轴是向右(X)向下(Y)的。既可以表示点,也可以表示向量。
var ZP Point
ZP是原点。
func Pt
func Pt(X, Y int) Point
返回Point{X , Y}
func (Point) Eq
func (p Point) Eq(q Point) bool
报告p和q是否相同。
func (Point) Add
func (p Point) Add(q Point) Point
返回点Point{p.X+q.X, p.Y+q.Y}
func (Point) Sub
func (p Point) Sub(q Point) Point
返回点Point{p.X-q.X, p.Y-q.Y}
func (Point) Mul
func (p Point) Mul(k int) Point
返回点Point{p.Xk, p.Yk}
func (Point) Div
func (p Point) Div(k int) Point
返回点Point{p.X/k, p.Y/k }
func (Point) In
func (p Point) In(r Rectangle) bool
报告p是否在r范围内。
func (Point) Mod
func (p Point) Mod(r Rectangle) Point
返回r范围内的某点q,满足p.X-q.X是r宽度的倍数,p.Y-q.Y是r高度的倍数。
func (Point) String
func (p Point) String() string
返回p的字符串表示。格式为"(3,4)"
type Rectangle
type Rectangle struct {
Min, Max Point
}
Rectangle代表一个矩形。该矩形包含所有满足Min.X <= X < Max.X且Min.Y <= Y < Max.Y的点。如果两个字段满足Min.X <= Max.X且Min.Y <= Max.Y,就称该实例为规范格式的。矩形的方法,当输入是规范格式时,总是返回规范格式的输出。
var ZR Rectangle
ZR是矩形的零值。
func Rect
func Rect(x0, y0, x1, y1 int) Rectangle
返回一个矩形Rectangle{Pt(x0, y0), Pt(x1, y1)}。
func (Rectangle) Canon
func (r Rectangle) Canon() Rectangle
返回矩形的规范版本(左上&右下),方法必要时会交换坐标的最大值和最小值。
func (Rectangle) Dx
func (r Rectangle) Dx() int
返回r的宽度。
func (Rectangle) Dy
func (r Rectangle) Dy() int
返回r的高度。
func (Rectangle) Size
func (r Rectangle) Size() Point
返回r的宽度w和高度h构成的点Point{w, h}。
func (Rectangle) Empty
func (r Rectangle) Empty() bool
报告矩形是否为空矩形。(即内部不包含点的矩形)
func (Rectangle) Eq
func (r Rectangle) Eq(s Rectangle) bool
报告两个矩形是否相同。
func (Rectangle) In
func (r Rectangle) In(s Rectangle) bool
如果r包含的所有点都在s内,则返回真;否则返回假。
func (Rectangle) Overlaps
func (r Rectangle) Overlaps(s Rectangle) bool
如果r和s有非空的交集,则返回真;否则返回假。
func (Rectangle) Add
func (r Rectangle) Add(p Point) Rectangle
返回矩形按p(作为向量)平移后的新矩形。
func (Rectangle) Sub
func (r Rectangle) Sub(p Point) Rectangle
返回矩形按p(作为向量)反向平移后的新矩形。
func (Rectangle) Intersect
func (r Rectangle) Intersect(s Rectangle) Rectangle
返回两个矩形的交集矩形(同时被r和s包含的最大矩形);如果r和s没有重叠会返回Rectangle零值。
func (Rectangle) Union
func (r Rectangle) Union(s Rectangle) Rectangle
返回同时包含r和s的最小矩形。
func (Rectangle) Inset
func (r Rectangle) Inset(n int) Rectangle
返回去掉矩形四周宽度n的框的矩形,n可为负数。如果n过大将返回靠近r中心位置的空矩形。
func (Rectangle) String
func (r Rectangle) String() string
返回矩形的字符串表示,格式为"(3,4)-(6,5)"。
type Uniform
type Uniform struct {
C color.Color
}
Uniform类型代表一块面积无限大的具有同一色彩的图像。它实现了color.Color、color.Model和Image等接口。
func NewUniform
func NewUniform(c color.Color) *Uniform
func (*Uniform) At
func (c *Uniform) At(x, y int) color.Color
func (*Uniform) Bounds
func (c *Uniform) Bounds() Rectangle
func (*Uniform) ColorModel
func (c *Uniform) ColorModel() color.Model
func (*Uniform) Convert
func (c *Uniform) Convert(color.Color) color.Color
func (*Uniform) Opaque
func (c *Uniform) Opaque() bool
Opaque方法扫描整个图像并报告该图像是否是完全不透明的。
func (*Uniform) RGBA
func (c *Uniform) RGBA() (r, g, b, a uint32)
type Alpha
type Alpha struct {
// Pix保管图像的像素,内容为alpha通道值(即透明度)。
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*1]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
Alpha类型代表一幅内存中的图像,其At方法返回color.Alpha类型的值。
func NewAlpha
func NewAlpha(r Rectangle) *Alpha
NewAlpha函数创建并返回一个具有指定宽度和高度的Alpha。
func (*Alpha) At
func (p *Alpha) At(x, y int) color.Color
func (*Alpha) Bounds
func (p *Alpha) Bounds() Rectangle
func (*Alpha) ColorModel
func (p *Alpha) ColorModel() color.Model
func (*Alpha) Opaque
func (p *Alpha) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*Alpha) PixOffset
func (p *Alpha) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*Alpha) Set
func (p *Alpha) Set(x, y int, c color.Color)
func (*Alpha) SetAlpha
func (p *Alpha) SetAlpha(x, y int, c color.Alpha)
func (*Alpha) SubImage
func (p *Alpha) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type Alpha16
type Alpha16 struct {
// Pix保管图像的像素,内容为alpha通道值(即透明度,大端在前的格式)。
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*2]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
Alpha16类型代表一幅内存中的图像,其At方法返回color.Alpha16类型的值。
func NewAlpha16
func NewAlpha16(r Rectangle) *Alpha16
NewAlpha16函数创建并返回一个具有指定范围的Alpha16。
func (*Alpha16) At
func (p *Alpha16) At(x, y int) color.Color
func (*Alpha16) Bounds
func (p *Alpha16) Bounds() Rectangle
func (*Alpha16) ColorModel
func (p *Alpha16) ColorModel() color.Model
func (*Alpha16) Opaque
func (p *Alpha16) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*Alpha16) PixOffset
func (p *Alpha16) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*Alpha16) Set
func (p *Alpha16) Set(x, y int, c color.Color)
func (*Alpha16) SetAlpha16
func (p *Alpha16) SetAlpha16(x, y int, c color.Alpha16)
func (*Alpha16) SubImage
func (p *Alpha16) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type Gray
type Gray struct {
// Pix保管图像的像素,内容为灰度。
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*1]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
Gray类型代表一幅内存中的图像,其At方法返回color.Gray类型的值。
func NewGray
func NewGray(r Rectangle) *Gray
NewGray函数创建并返回一个具有指定范围的Gray。
func (*Gray) At
func (p *Gray) At(x, y int) color.Color
func (*Gray) Bounds
func (p *Gray) Bounds() Rectangle
func (*Gray) ColorModel
func (p *Gray) ColorModel() color.Model
func (*Gray) Opaque
func (p *Gray) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*Gray) PixOffset
func (p *Gray) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*Gray) Set
func (p *Gray) Set(x, y int, c color.Color)
func (*Gray) SetGray
func (p *Gray) SetGray(x, y int, c color.Gray)
func (*Gray) SubImage
func (p *Gray) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type Gray16
type Gray16 struct {
// Pix保管图像的像素,内容为灰度(大端在前的格式)。
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*2]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
Gray16类型代表一幅内存中的图像,其At方法返回color.Gray16类型的值。
func NewGray16
func NewGray16(r Rectangle) *Gray16
NewGray16函数创建并返回一个具有指定范围的Gray16。
func (*Gray16) At
func (p *Gray16) At(x, y int) color.Color
func (*Gray16) Bounds
func (p *Gray16) Bounds() Rectangle
func (*Gray16) ColorModel
func (p *Gray16) ColorModel() color.Model
func (*Gray16) Opaque
func (p *Gray16) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*Gray16) PixOffset
func (p *Gray16) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*Gray16) Set
func (p *Gray16) Set(x, y int, c color.Color)
func (*Gray16) SetGray16
func (p *Gray16) SetGray16(x, y int, c color.Gray16)
func (*Gray16) SubImage
func (p *Gray16) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type RGBA
type RGBA struct {
// Pix保管图像的像素色彩信息,顺序为R, G, B, A
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*4]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
RGBA类型代表一幅内存中的图像,其At方法返回color.RGBA类型的值。
func NewRGBA
func NewRGBA(r Rectangle) *RGBA
NewRGBA函数创建并返回一个具有指定范围的RGBA。
func (*RGBA) At
func (p *RGBA) At(x, y int) color.Color
func (*RGBA) Bounds
func (p *RGBA) Bounds() Rectangle
func (*RGBA) ColorModel
func (p *RGBA) ColorModel() color.Model
func (*RGBA) Opaque
func (p *RGBA) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*RGBA) PixOffset
func (p *RGBA) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*RGBA) Set
func (p *RGBA) Set(x, y int, c color.Color)
func (*RGBA) SetRGBA
func (p *RGBA) SetRGBA(x, y int, c color.RGBA)
func (*RGBA) SubImage
func (p *RGBA) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type RGBA64
type RGBA64 struct {
// Pix保管图像的像素色彩信息,顺序为R, G, B, A(每个值都是大端在前的格式)
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*8]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
RGBA64类型代表一幅内存中的图像,其At方法返回color.RGBA64类型的值
func NewRGBA64
func NewRGBA64(r Rectangle) *RGBA64
NewRGBA64函数创建并返回一个具有指定范围的RGBA64
func (*RGBA64) At
func (p *RGBA64) At(x, y int) color.Color
func (*RGBA64) Bounds
func (p *RGBA64) Bounds() Rectangle
func (*RGBA64) ColorModel
func (p *RGBA64) ColorModel() color.Model
func (*RGBA64) Opaque
func (p *RGBA64) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*RGBA64) PixOffset
func (p *RGBA64) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*RGBA64) Set
func (p *RGBA64) Set(x, y int, c color.Color)
func (*RGBA64) SetRGBA64
func (p *RGBA64) SetRGBA64(x, y int, c color.RGBA64)
func (*RGBA64) SubImage
func (p *RGBA64) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type NRGBA
type NRGBA struct {
// Pix保管图像的像素色彩信息,顺序为R, G, B, A
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*4]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
NRGBA类型代表一幅内存中的图像,其At方法返回color.NRGBA类型的值。
func NewNRGBA
func NewNRGBA(r Rectangle) *NRGBA
NewNRGBA函数创建并返回一个具有指定范围的NRGBA。
func (*NRGBA) At
func (p *NRGBA) At(x, y int) color.Color
func (*NRGBA) Bounds
func (p *NRGBA) Bounds() Rectangle
func (*NRGBA) ColorModel
func (p *NRGBA) ColorModel() color.Model
func (*NRGBA) Opaque
func (p *NRGBA) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*NRGBA) PixOffset
func (p *NRGBA) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*NRGBA) Set
func (p *NRGBA) Set(x, y int, c color.Color)
func (*NRGBA) SetNRGBA
func (p *NRGBA) SetNRGBA(x, y int, c color.NRGBA)
func (*NRGBA) SubImage
func (p *NRGBA) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type NRGBA64
type NRGBA64 struct {
// Pix保管图像的像素色彩信息,顺序为R, G, B, A(每个值都是大端在前的格式)
// 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*8]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
}
NRGBA64类型代表一幅内存中的图像,其At方法返回color.NRGBA64类型的值。
func NewNRGBA64
func NewNRGBA64(r Rectangle) *NRGBA64
NewNRGBA64函数创建并返回一个具有指定范围的NRGBA64。
func (*NRGBA64) At
func (p *NRGBA64) At(x, y int) color.Color
func (*NRGBA64) Bounds
func (p *NRGBA64) Bounds() Rectangle
func (*NRGBA64) ColorModel
func (p *NRGBA64) ColorModel() color.Model
func (*NRGBA64) Opaque
func (p *NRGBA64) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*NRGBA64) PixOffset
func (p *NRGBA64) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*NRGBA64) Set
func (p *NRGBA64) Set(x, y int, c color.Color)
func (*NRGBA64) SetNRGBA64
func (p *NRGBA64) SetNRGBA64(x, y int, c color.NRGBA64)
func (*NRGBA64) SubImage
func (p *NRGBA64) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type Paletted
type Paletted struct {
// Pix保存图像的象素,内容为调色板的索引。
// 像素(x, y)的位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*1]
Pix []uint8
// Stride是Pix中每行像素占用的字节数
Stride int
// Rect是图像的范围
Rect Rectangle
// Palette是图像的调色板
Palette color.Palette
}
Paletted类型是一幅采用uint8类型索引调色板的内存中的图像。
func NewPaletted
func NewPaletted(r Rectangle, p color.Palette) *Paletted
NewPaletted函数创建并返回一个具有指定范围、调色板的Paletted。
func (*Paletted) At
func (p *Paletted) At(x, y int) color.Color
func (*Paletted) Bounds
func (p *Paletted) Bounds() Rectangle
func (*Paletted) ColorIndexAt
func (p *Paletted) ColorIndexAt(x, y int) uint8
func (*Paletted) ColorModel
func (p *Paletted) ColorModel() color.Model
func (*Paletted) Opaque
func (p *Paletted) Opaque() bool
Opaque方法扫描整个图像并报告图像是否是完全不透明的。
func (*Paletted) PixOffset
func (p *Paletted) PixOffset(x, y int) int
PixOffset方法返回像素(x, y)的数据起始位置在Pix字段的偏移量/索引。
func (*Paletted) Set
func (p *Paletted) Set(x, y int, c color.Color)
func (*Paletted) SetColorIndex
func (p *Paletted) SetColorIndex(x, y int, index uint8)
func (*Paletted) SubImage
func (p *Paletted) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
type YCbCrSubsampleRatio
type YCbCrSubsampleRatio int
YcbCrSubsampleRatio是YCbCr图像的色度二次采样比率。
const (
YCbCrSubsampleRatio444 YCbCrSubsampleRatio = iota
YCbCrSubsampleRatio422
YCbCrSubsampleRatio420
YCbCrSubsampleRatio440
)
func (YCbCrSubsampleRatio) String
func (s YCbCrSubsampleRatio) String() string
type YCbCr
type YCbCr struct {
Y, Cb, Cr []uint8
YStride int
CStride int
SubsampleRatio YCbCrSubsampleRatio
Rect Rectangle
}
YcbCr代表采用Y'CbCr色彩模型的一幅内存中的图像。每个像素都对应一个Y采样,但每个Cb/Cr采样对应多个像素。Ystride是两个垂直相邻的像素之间的Y组分的索引增量。CStride是两个映射到单独的色度采样的垂直相邻的像素之间的Cb/Cr组分的索引增量。虽然不作绝对要求,但Ystride字段和len(Y)一般应为8的倍数,并且:
For 4:4:4, CStride == YStride/1 && len(Cb) == len(Cr) == len(Y)/1.
For 4:2:2, CStride == YStride/2 && len(Cb) == len(Cr) == len(Y)/2.
For 4:2:0, CStride == YStride/2 && len(Cb) == len(Cr) == len(Y)/4.
For 4:4:0, CStride == YStride/1 && len(Cb) == len(Cr) == len(Y)/2.
func NewYCbCr
func NewYCbCr(r Rectangle, subsampleRatio YCbCrSubsampleRatio) *YCbCr
NewYCbCr函数创建并返回一个具有指定宽度、高度和二次采样率的YcbCr。
func (*YCbCr) At
func (p *YCbCr) At(x, y int) color.Color
func (*YCbCr) Bounds
func (p *YCbCr) Bounds() Rectangle
func (*YCbCr) ColorModel
func (p *YCbCr) ColorModel() color.Model
func (*YCbCr) Opaque
func (p *YCbCr) Opaque() bool
func (*YCbCr) COffset
func (p *YCbCr) COffset(x, y int) int
像素(X, Y)的Cb或Cr(色度)组分的数据起始位置在Cb/Cr字段的偏移量/索引。
func (*YCbCr) YOffset
func (p *YCbCr) YOffset(x, y int) int
像素(X, Y)的Y(亮度)组分的数据起始位置在Y字段的偏移量/索引。
func (*YCbCr) SubImage
func (p *YCbCr) SubImage(r Rectangle) Image
SubImage方法返回代表原图像一部分(r的范围)的新图像。返回值和原图像的像素数据是共用的。
- color
- color/palette
- draw
- gif
- jpeg
- png
color
color包实现了基本色彩库。
Variables
var (
Black = Gray16{0} // 黑色
White = Gray16{0xffff} // 白色
Transparent = Alpha16{0} // 完全透明
Opaque = Alpha16{0xffff} // 完全不透明
)
标准色彩。
type Color
type Color interface {
// 方法返回预乘了alpha的红、绿、蓝色彩值和alpha通道值,范围都在[0, 0xFFFF]。
// 返回值类型为uint32,这样当乘以接近0xFFFF的混合参数时,不会溢出。
RGBA() (r, g, b, a uint32)
}
实现了Color接口的类型可以将自身转化为预乘了alpha的16位通道的RGBA,转换可能会丢失色彩信息。
type Model
type Model interface {
Convert(c Color) Color
}
Model接口可以将任意Color接口转换为采用自身色彩模型的Color接口。转换可能会丢失色彩信息。
var (
RGBAModel Model = ModelFunc(rgbaModel)
RGBA64Model Model = ModelFunc(rgba64Model)
NRGBAModel Model = ModelFunc(nrgbaModel)
NRGBA64Model Model = ModelFunc(nrgba64Model)
AlphaModel Model = ModelFunc(alphaModel)
Alpha16Model Model = ModelFunc(alpha16Model)
GrayModel Model = ModelFunc(grayModel)
Gray16Model Model = ModelFunc(gray16Model)
)
Models接口返回标准的Color接口类型。
var YCbCrModel Model = ModelFunc(yCbCrModel)
包变量YcbCrModel是Y'cbCr色彩模型的Model接口。
func ModelFunc
func ModelFunc(f func(Color) Color) Model
函数ModelFunc返回一个调用函数f实现色彩转换的Model接口。
type Alpha
type Alpha struct {
A uint8
}
Alpha类型代表一个8位的alpha通道(alpha通道表示透明度)。
func (Alpha) RGBA
func (c Alpha) RGBA() (r, g, b, a uint32)
type Alpha16
type Alpha16 struct {
A uint16
}
Alpha16类型代表一个16位的alpha通道。
func (Alpha16) RGBA
func (c Alpha16) RGBA() (r, g, b, a uint32)
type Gray
type Gray struct {
Y uint8
}
Gray类型代表一个8位的灰度色彩。
func (Gray) RGBA
func (c Gray) RGBA() (r, g, b, a uint32)
type Gray16
type Gray16 struct {
Y uint16
}
Gray16类型代表一个16位的灰度色彩。
func (Gray16) RGBA
func (c Gray16) RGBA() (r, g, b, a uint32)
type RGBA
type RGBA struct {
R, G, B, A uint8
}
RGBA类型代表传统的预乘了alpha通道的32位RGB色彩,Red、Green、Blue、Alpha各8位。
func (RGBA) RGBA
func (c RGBA) RGBA() (r, g, b, a uint32)
type RGBA64
type RGBA64 struct {
R, G, B, A uint16
}
RGBA64类型代表预乘了alpha通道的64位RGB色彩,Red、Green、Blue、Alpha各16位。
func (RGBA64) RGBA
func (c RGBA64) RGBA() (r, g, b, a uint32)
type NRGBA
type NRGBA struct {
R, G, B, A uint8
}
NRGBA类型代表没有预乘alpha通道的32位RGB色彩,Red、Green、Blue、Alpha各8位。
func (NRGBA) RGBA
func (c NRGBA) RGBA() (r, g, b, a uint32)
type NRGBA64
type NRGBA64 struct {
R, G, B, A uint16
}
NRGBA64类型代表没有预乘alpha通道的64位RGB色彩,Red、Green、Blue、Alpha各16位。
func (NRGBA64) RGBA
func (c NRGBA64) RGBA() (r, g, b, a uint32)
type YCbCr
type YCbCr struct {
Y, Cb, Cr uint8
}
YcbCr代表完全不透明的24位Y'CbCr色彩;每个色彩都有1个亮度成分和2个色度成分,分别用8位字节表示。
JPEG、VP8、MPEG家族和其他编码方式使用本色彩模型。这些编码通常将Y'CbCr 和YUV两个色彩模型等同使用(Y=Y'=黄、U=Cb=青、V=Cr=品红)。但严格来说,YUV模只用于模拟视频信号,Y'是经过伽玛校正的Y。RGB和Y'CbCr色彩模型之间的转换会丢失色彩信息。两个色彩模型之间的转换有多个存在细微区别的算法。本包采用JFIF算法,参见http://www.w3.org/Graphics/JPEG/jfif3.pdf
func (YCbCr) RGBA
func (c YCbCr) RGBA() (uint32, uint32, uint32, uint32)
type Palette
type Palette []Color
Palette类型代表一个色彩的调色板。
func (Palette) Convert
func (p Palette) Convert(c Color) Color
返回调色板中与色彩c在欧几里德RGB色彩空间最接近的色彩。(实现了Model接口)
func (Palette) Index
func (p Palette) Index(c Color) int
返回调色板中与色彩c在欧几里德RGB色彩空间最接近的色彩的索引。
func RGBToYCbCr
func RGBToYCbCr(r, g, b uint8) (uint8, uint8, uint8)
函数将RGB三原色转换为Y'CbCr三原色。
func YCbCrToRGB
func YCbCrToRGB(y, cb, cr uint8) (uint8, uint8, uint8)
函数将Y'CbCr三原色转换为RGB三原色。
color/palette
palette包提供了标准的调色板。
Variables
var Plan9 = []color.Color{
color.RGBA{0x00, 0x00, 0x00, 0xff},
color.RGBA{0x00, 0x00, 0x44, 0xff},
color.RGBA{0x00, 0x00, 0x88, 0xff},
color.RGBA{0x00, 0x00, 0xcc, 0xff},
// ……
color.RGBA{0xff, 0xff, 0xff, 0xff},
}
Plan9是一个256色的调色板,将24位的RGB色彩立方划分为4x4x4的子立方,每个子立方体都有4个色调。比起WebSafe,本方案通过将颜色立方划分成更少的方格减少了颜色的分辨率,以便用额外的空间换取增加强度的分辨率。结果是灰色有16个色调(4个灰色子立方每个有4个采样),初级和次级颜色各有13个色调(3个子立方每个有4个采样,再加上黑色),加上对色彩立方其余部分的合理色彩选择,实现了更好的连续色调的表现。
本调色板用于Plan9操作系统,参见http://plan9.bell-labs.com/magic/man2html/6/color
var WebSafe = []color.Color{
color.RGBA{0x00, 0x00, 0x00, 0xff},
color.RGBA{0x00, 0x00, 0x33, 0xff},
color.RGBA{0x00, 0x00, 0x66, 0xff},
color.RGBA{0x00, 0x00, 0x99, 0xff},
//……
color.RGBA{0xff, 0xff, 0xff, 0xff},
}
WebSafe是一个216色的调色板,被早期版本的Netscape Navigator(一种浏览器)广泛使用,它也被称为Netcape色彩立方。细节参见http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors
draw
draw包提供了图像合成函数。参见:http://golang.org/doc/articles/image_draw.html
type Quantizer
type Quantizer interface {
// Quantize方法向p中最多增加cap(p)-len(p)个色彩并返回修正后的调色板
// 返回值更适合(可以更少失真的)将m转换为一个调色板类型的图像
Quantize(p color.Palette, m image.Image) color.Palette
}
Quantizer接口为一个图像生成调色板。
type Image
type Image interface {
image.Image
Set(x, y int, c color.Color)
}
Image接口比image.Image接口多了Set方法,该方法用于修改单个像素的色彩。
type Drawer
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
type Op int
Op是Porter-Duff合成的操作符。
const (
// 源图像透过遮罩后,覆盖在目标图像上(类似图层)
Over Op = iota
// 源图像透过遮罩后,替换掉目标图像
Src
)
func (Op) Draw
func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)
Draw方法通过使用Op参数调用包的Draw函数实现了Drawer接口。
func Draw
func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)
Draw函数使用nil的mask参数调用DrawMask函数。
func DrawMask
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则视为完全透明。
gif
gif包实现了gif文件的编码器和解码器。gif格式参见:http://www.w3.org/Graphics/GIF/spec-gif89a.txt
type Options
type Options struct {
// NumColors是图像中的最多颜色数,范围[1, 256]
NumColors int
// Quantizer用于生成NumColors大小的调色板,为nil时默认使用palette.Plan9
Quantizer draw.Quantizer
// Drawer用于将图像写入期望的调色板格式的图像,为nil时会使用draw.FloydSteinberg
Drawer draw.Drawer
}
Options是编码参数。
func Decode
func Decode(r io.Reader) (image.Image, error)
从文件流解码并返回GIF文件中的第一幅图像。
func DecodeConfig
func DecodeConfig(r io.Reader) (image.Config, error)
返回GIF图像的色彩模型和尺寸;函数不会解码整个图像文件。
func Encode
func Encode(w io.Writer, m image.Image, o *Options) error
函数将图像以GIF格式写入w中。
type GIF
type GIF struct {
Image []*image.Paletted // 连续的图像
Delay []int // 每一帧延迟时间,单位是0.01s
LoopCount int // 总的循环时间
}
GIF类型代表可能保存在GIF文件里的多幅图像。
func DecodeAll
func DecodeAll(r io.Reader) (*GIF, error)
函数从r中读取一个GIF格式文件;返回值中包含了连续的图帧和时间信息。
func EncodeAll
func EncodeAll(w io.Writer, g *GIF) error
函数将g中所有的图像按指定的每帧延迟和累计循环时间写入w中。
jpeg
jpeg包实现了jpeg格式图像的编解码。JPEG格式参见http://www.w3.org/Graphics/JPEG/itu-t81.pdf
Constants
const DefaultQuality = 75
DefaultQuality是默认的编码质量参数。
type Reader
type Reader interface {
io.Reader
ReadByte() (c byte, err error)
}
如果提供的io.Reader接口没有ReadByte方法,Decode函数会为该接口附加一个缓冲。
type FormatError
type FormatError string
当输入流不是合法的jpeg格式图像时,就会返回FormatError类型的错误。
func (FormatError) Error
func (e FormatError) Error() string
type UnsupportedError
type UnsupportedError string
当输入流使用了合法但尚不支持的jpeg特性的时候,就会返回UnsupportedError类型的错误。
func (UnsupportedError) Error
func (e UnsupportedError) Error() string
type Options
type Options struct {
Quality int
}
Options是编码质量参数。取值范围[1,100],越大图像编码质量越高。
func Decode
func Decode(r io.Reader) (image.Image, error)
从r读取一幅jpeg格式的图像并解码返回该图像。
func DecodeConfig
func DecodeConfig(r io.Reader) (image.Config, error)
返回JPEG图像的色彩模型和尺寸;函数不会解码整个图像。
func Encode
func Encode(w io.Writer, m image.Image, o *Options) error
Encode函数将采用JPEG 4:2:0基线格式和指定的编码质量将图像写入w。如果o为nil将使用DefaultQuality。
png
png包实现了PNG图像的编解码。PNG格式参见:http://www.w3.org/TR/PNG/
type FormatError
type FormatError string
当输入流不是合法的png格式图像时,就会返回FormatError类型的错误。
func (FormatError) Error
func (e FormatError) Error() string
type UnsupportedError
type UnsupportedError string
当输入流使用了合法但尚不支持的png特性的时候,就会返回UnsupportedError类型的错误。
func (UnsupportedError) Error
func (e UnsupportedError) Error() string
func Decode
func Decode(r io.Reader) (image.Image, error)
从r读取一幅png格式的图像并解码返回该图像。图像的具体类型要看png文件的内容而定。
func DecodeConfig
func DecodeConfig(r io.Reader) (image.Config, error)
返回PNG图像的色彩模型和尺寸;函数不会解码整个图像。
func Encode
func Encode(w io.Writer, m image.Image) error
将图像m以PNG格式写入w。任意图像类型都可以被编码,但image.NRGBA以外格式的图像可能会在编码时丢失一些图像信息。