Maison > développement back-end > Golang > le corps du texte

Rendu .gif dans Go

PHPz
Libérer: 2024-02-09 08:45:29
avant
889 Les gens l'ont consulté

在 Go 中渲染 .gif

En langage Go, le rendu des fichiers .gif est une tâche courante. Le fichier .gif est un format d'image dynamique courant qui peut présenter des effets dynamiques en basculant entre des images d'image consécutives. Dans le langage Go, nous pouvons utiliser certaines bibliothèques pour traiter et restituer des fichiers .gif afin d'obtenir des effets d'animation personnalisés. Cet article explique comment restituer les fichiers .gif en langage Go et fournit des exemples de code et des techniques pour vous aider à mieux comprendre et appliquer cette fonctionnalité. Que vous soyez un développeur débutant ou expérimenté, cet article vous fournira des références et des conseils utiles. Explorons les secrets du rendu des fichiers .gif en langage Go !

Contenu de la question

J'essaie de faire fonctionner l'exemple de code. Il vient du "langage de programmation go" (https://github.com/adonovan/gopl.io/blob/1ae3ec64947b7a5331b186f1b1138fc98c0f1c06/ch1/lissajous/main.go). Lorsque vous essayez de visualiser l'animation, le gif n'est pas rendu. Erreur du logiciel de rendu GIF :

.gif Les normes ont-elles changé depuis 2016 ou est-ce que je fais quelque chose de mal ?

// copyright © 2016 alan a. a. donovan & brian w. kernighan.
// license: https://creativecommons.org/licenses/by-nc-sa/4.0/

// lissajous generates gif animations of random lissajous figures.
package main

import (
    "image"
    "image/color"
    "image/gif"
    "io"
    "math"
    "math/rand"
    "os"
)

var palette = []color.color{color.white, color.black}

const (
    whiteindex = 0 // first color in palette
    blackindex = 1 // next color in palette
)

func main() {
    lissajous(os.stdout)
}

func lissajous(out io.writer) {
    const (
        cycles  = 5     // number of complete x oscillator revolutions
        res     = 0.001 // angular resolution
        size    = 100   // image canvas covers [-size..+size]
        nframes = 64    // number of animation frames
        delay   = 8     // delay between frames in 10ms units
    )
    freq := rand.float64() * 3.0 // relative frequency of y oscillator
    anim := gif.gif{loopcount: nframes}
    phase := 0.0 // phase difference
    for i := 0; i < nframes; i++ {
        rect := image.rect(0, 0, 2*size+1, 2*size+1)
        img := image.newpaletted(rect, palette)
        for t := 0.0; t < cycles*2*math.pi; t += res {
            x := math.sin(t)
            y := math.sin(t*freq + phase)
            img.setcolorindex(size+int(x*size+0.5), size+int(y*size+0.5),
                blackindex)
        }
        phase += 0.1
        anim.delay = append(anim.delay, delay)
        anim.image = append(anim.image, img)
    }
    gif.encodeall(out, &anim) // note: ignoring encoding errors
}
Copier après la connexion

Les commandes de construction et d'exécution sont :

go build .\main.go
.\main.exe > out.gif
Copier après la connexion

Solution

Utilisationbufio.newwriter

func main() {
    filename := "1.gif"
    f, err3 := os.create(filename)
    if err3 != nil {
        fmt.println("create file fail")
    }
    w := bufio.newwriter(f) 
    lissajous(w)
    w.flush()
    f.close()

}
Copier après la connexion

ou

func main() {
    w := bufio.NewWriter(os.Stdout)
    lissajous(w)
    w.Flush()
    os.Stdout.Close()
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!