es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Golang crea una animación gif a partir de imágenes png.

Estoy tratando de crear una animación GIF a partir de imágenes PNG. Pero obtengo ruido de color. Captura de pantalla: https://prnt.sc/22rrrfn

He intentado cambiar Pallete.Plan9 porque tal vez 256 colores no sean suficientes, pero no obtuve buenos resultados.

func test() error {
    fmt.Printf("Generando 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 al abrir el directorio")
    }
    defer reader.Close()

    img, err := png.Decode(reader)
    if err != nil {
        fmt.Println("Error al decodificar")
    }
    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 al crear el archivo")
}
encodeErr := gif.EncodeAll(file, &anim)
if encodeErr != nil {
    return fmt.Errorf("No se pudo crear el archivo %s: %v", err)
}
return nil
}

¿Qué estoy haciendo mal? Por favor, ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás utilizando el algoritmo Floyd-Steinberg para difuminar las imágenes, pero estás usando la paleta.Plan9 como tu paleta. La paleta Plan9 solo tiene 256 colores, lo cual puede no ser suficiente para representar con precisión los colores en tus imágenes, lo que lleva a ruido de color en el GIF resultante.

    Puedes intentar usar una paleta diferente, como la paleta.WebSafe, que tiene 216 colores y puede producir mejores resultados. Además, podrías experimentar con diferentes algoritmos de difuminado, como draw.Threshold o draw.Atkinson, para ver si producen mejores resultados.

    Otra opción podría ser usar herramientas como ImageMagick o FFmpeg, las cuales tienen algoritmos más avanzados para generar animaciones GIF a partir de imágenes y pueden producir resultados de mejor calidad.

Comments are closed.