Home > Blockchain >  Golang image/gif EncodeAll have many black dots
Golang image/gif EncodeAll have many black dots

Time:10-11

I have many png images and want encode them to a gif animation.

These png images dont have any black dots ,but the gif result have many dots.

    g := new(gif.GIF)
    frames := len(images)
    g.Image = make([]*image.Paletted, frames)
    g.Delay = make([]int, frames)
    eg := errgroup.Group{}
    var cl color.Palette = palette.Plan9
    for k, img := range images {
        img := img
        k := k
        eg.Go(func() error {
            Paletted := image.NewPaletted(img.Bounds(), cl)
            draw.FloydSteinberg.Draw(Paletted, img.Bounds(), img, image.Point{})
            g.Image[k] = Paletted
            g.Delay[k] = deply
            return nil
        })
    }
    if err := eg.Wait(); err != nil {
        return nil, err
    }
    var buf bytes.Buffer
    err := gif.EncodeAll(&buf, g)

origin png: origin png

with num: enter image description here

my png info:

File Type : PNG
File Type Extension : png
MIME Type : image/png
Bit Depth : 8
Color Type : RGB with Alpha
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
SRGB Rendering : Perceptual
Exif Byte Order : Big-endian (Motorola, MM)
Color Space : sRGB

gif with black dots: gif with black dots

used palgen.Generate(img, 256):

palgen.Generate(img, 256)

CodePudding user response:

GIF uses a 256 color palette, whereas PNG typically is RGBA with at least 8 bits per color channel (and alpha). In your incomplete example code you use the predefined source.png

Final GIF gif.gif:

gif.gif

CodePudding user response:

I use apng can solve this problem,but I still want to how to do with gif.

https://github.com/kettek/apng

  • Related