Documentation
¶
Overview ¶
Package gif implements a GIF image decoder and encoder.
The GIF specification is at https://www.w3.org/Graphics/GIF/spec-gif89a.txt.
Index ¶
- Constants
- func Decode(r io.Reader) (image.Image, error)
- func DecodeConfig(r io.Reader) (image.Config, error)
- func Encode(w io.Writer, m image.Image, o *Options) error
- func EncodeAll(w io.Writer, g *GIF) error
- func OptimizeAll(pms []*image.Paletted, transparentIndex uint8) error
- func WithDrawer(d draw.Drawer) option
- func WithNumColors(n int) option
- func WithQuantizer(q draw.Quantizer) option
- type ApplicationNetscape
- type Comment
- type Decoder
- type Encoder
- func (e *Encoder) Encode(g *GIF) error
- func (e *Encoder) EncodeImage(m image.Image, o ...option) error
- func (e *Encoder) Flush() error
- func (e *Encoder) WriteApplicationNetscape(an *ApplicationNetscape) error
- func (e *Encoder) WriteComment(c *Comment) error
- func (e *Encoder) WriteFrame(f *Frame) error
- func (e *Encoder) WriteHeader(cfg image.Config, backgroundIndex byte) error
- func (e *Encoder) WritePlainText(pt *PlainText) error
- func (e *Encoder) WriteTrailer() error
- func (e *Encoder) WriteUnknownApplication(ua *UnknownApplication) error
- func (e *Encoder) WriteUnknownExtension(ue *UnknownExtension) error
- type Frame
- type GIF
- type Header
- type Optimizer
- type Options
- type PlainText
- type UnknownApplication
- type UnknownExtension
Examples ¶
Constants ¶
const ( DisposalNone = 0x01 DisposalBackground = 0x02 DisposalPrevious = 0x03 )
Disposal Methods.
Variables ¶
This section is empty.
Functions ¶
func Decode ¶
Decode reads a GIF image from r and returns the first embedded image as an image.Image.
func DecodeConfig ¶
DecodeConfig returns the global color model and dimensions of a GIF image without decoding the entire image.
func EncodeAll ¶
EncodeAll writes the images in g to w in GIF format with the given loop count and delay between frames.
func OptimizeAll ¶
OptimizeAll takes a slice of images and replaces unchanged pixels with the transparent palette index. Each image is then cropped to omit unchanged regions where possible.
func WithDrawer ¶
func WithNumColors ¶
func WithNumColors(n int) option
func WithQuantizer ¶
Types ¶
type ApplicationNetscape ¶
type Comment ¶
type Comment struct {
Strings []string // Comments, up to 255 ASCII characters per string.
}
type Decoder ¶
type Decoder = decoder
func NewDecoder ¶
Example ¶
f, _ := os.Open("tmp.gif")
defer f.Close()
dec := gif.NewDecoder(f)
_, _ = dec.ReadHeader()
i := 0
for {
if blk, err := dec.ReadBlock(); err == io.EOF {
break
} else if frm, ok := blk.(*gif.Frame); ok {
f, _ := os.Create(fmt.Sprintf("tmp%d.gif", i))
_ = gif.Encode(f, frm.Image, nil)
_ = f.Close()
i++
}
}
func (*Decoder) ReadHeader ¶
type Encoder ¶
type Encoder = encoder
func NewEncoder ¶
Example ¶
f, _ := os.Create("tmp.gif")
defer f.Close()
enc := gif.NewEncoder(f)
pal := make(color.Palette, 0x100)
for i := range pal {
pal[i] = color.Gray{Y: uint8(i)}
}
_ = enc.WriteHeader(image.Config{Width: 100, Height: 100, ColorModel: pal}, 0)
pm := image.NewPaletted(image.Rect(0, 0, 100, 100), pal)
for i := 0; i < 100; i++ {
rand.Read(pm.Pix)
_ = enc.WriteFrame(&gif.Frame{Image: pm})
}
_ = enc.WriteTrailer()
_ = enc.Flush()
func (*Encoder) WriteApplicationNetscape ¶
func (e *Encoder) WriteApplicationNetscape(an *ApplicationNetscape) error
func (*Encoder) WriteComment ¶
func (*Encoder) WriteFrame ¶
func (*Encoder) WriteHeader ¶
func (*Encoder) WritePlainText ¶
func (*Encoder) WriteTrailer ¶
func (*Encoder) WriteUnknownApplication ¶
func (e *Encoder) WriteUnknownApplication(ua *UnknownApplication) error
func (*Encoder) WriteUnknownExtension ¶
func (e *Encoder) WriteUnknownExtension(ue *UnknownExtension) error
type GIF ¶
type GIF struct {
Image []*image.Paletted // The successive images.
Delay []int // The successive delay times, one per frame, in 100ths of a second.
// LoopCount controls the number of times an animation will be
// restarted during display.
// A LoopCount of 0 means to loop forever.
// A LoopCount of -1 means to show each frame only once.
// Otherwise, the animation is looped LoopCount+1 times.
LoopCount int
// Disposal is the successive disposal methods, one per frame. For
// backwards compatibility, a nil Disposal is valid to pass to EncodeAll,
// and implies that each frame's disposal method is 0 (no disposal
// specified).
Disposal []byte
// Config is the global color table (palette), width and height. A nil or
// empty-color.Palette Config.ColorModel means that each frame has its own
// color table and there is no global color table. Each frame's bounds must
// be within the rectangle defined by the two points (0, 0) and
// (Config.Width, Config.Height).
//
// For backwards compatibility, a zero-valued Config is valid to pass to
// EncodeAll, and implies that the overall GIF's width and height equals
// the first frame's bounds' Rectangle.Max point.
Config image.Config
// BackgroundIndex is the background index in the global color table, for
// use with the DisposalBackground disposal method.
BackgroundIndex byte
}
GIF represents the possibly multiple images stored in a GIF file.
type Optimizer ¶
type Optimizer struct {
// contains filtered or unexported fields
}
func NewOptimizer ¶
NewOptimizer returns a new Optimizer with the given transparent palette index.
func (*Optimizer) Optimize ¶
Optimize compares the given image with the previous frame and replaces identical pixels with the transparent palette index. The smallest possible sub-image containing all changed pixels is returned. The first image passed cannot be optimized and is only used to initialize the internal image buffer.
type Options ¶
type Options struct {
// NumColors is the maximum number of colors used in the image.
// It ranges from 1 to 256.
NumColors int
// Quantizer is used to produce a palette with size NumColors.
// palette.Plan9 is used in place of a nil Quantizer.
Quantizer draw.Quantizer
// Drawer is used to convert the source image to the desired palette.
// draw.FloydSteinberg is used in place of a nil Drawer.
Drawer draw.Drawer
}
Options are the encoding parameters.
type PlainText ¶
type PlainText struct {
TextGridLeftPosition uint16
TextGridTopPosition uint16
TextGridWidth uint16
TextGridHeight uint16
CharacterCellWidth byte
CharacterCellHeight byte
TextForegroundColorIndex byte
TextBackgroundColorIndex byte
Strings []string // Text, up to 255 ASCII characters per string.
DelayTime time.Duration // Delay time rounded to 100ths of a second.
DisposalMethod byte // Disposal method, one of DisposalNone, DisposalBackground, DisposalPrevious.
}