Golang标准库——image

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以外格式的图像可能会在编码时丢失一些图像信息。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343