我正在尝试从 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
}
我做错了什么?请帮忙
嗯,不完全确定,但是
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)
然后看看它是什么样子。