Golang 从 png 图像创建 gif 动画

问题描述 投票:0回答:1

我正在尝试从 png 图像创建 GIF 动画。但我通过彩色噪点得到了它。截图:https://prnt.sc/22rrrfn

我尝试过更改Pallete.Plan9,因为256种颜色可能不够,但没有得到好的结果。

func test() error {
    fmt.Printf("Generating GIF")
    files, err := ioutil.ReadDir("text")
    if err != nil {
        log.Fatal(err)
    }
    var filenames []string
    for _, file := range files {
        filenames = append(filenames, file.Name())
    }

    anim := gif.GIF{LoopCount: len(filenames)}
    fmt.Println(anim.LoopCount)
    for _, filename := range filenames {
        reader, err := os.Open("text/" + filename)
        if err != nil {
            fmt.Println("Error Open dir")
        }
        defer reader.Close()

        img, err := png.Decode(reader)
        if err != nil {
            fmt.Println("Error Decode")
        }
        bounds := img.Bounds()
        drawer := draw.FloydSteinberg

        palettedImg := image.NewPaletted(bounds, palette.Plan9)

        drawer.Draw(palettedImg, img.Bounds(), img, image.ZP)
        anim.Image = append(anim.Image, palettedImg)
        anim.Delay = append(anim.Delay, 0)
    }
    output := fmt.Sprintf("FINAL.gif")
    file, err := os.Create(output)
    defer file.Close()
    if err != nil {
        fmt.Println("Error create file")
    }
    encodeErr := gif.EncodeAll(file, &anim)
    if encodeErr != nil {
        return fmt.Errorf("Unable to create file %s: %v", err)
    }
    return nil
}

我做错了什么?请帮忙

go image-processing animated-gif dithering
1个回答
1
投票

嗯,不完全确定,但是

drawer := draw.FloydSteinberg
使用了 Floyd-Steinberg 抖动,并且可能会产生这些伪影。您是否尝试过仅使用
draw.Draw

会换掉这个:

drawer := draw.FloydSteinberg

palettedImg:= image.NewPaletted(bounds, palette.Plan9)

drawer.Draw(palettedImg,img.Bounds(),img,image.ZP)

有了这个:

palettedImg:= image.NewPaletted(bounds, palette.Plan9)

draw.Draw(palettedImg,img.Bounds(),img,image.ZP)

然后看看它是什么样子。

© www.soinside.com 2019 - 2024. All rights reserved.