Maison >développement back-end >Golang >Rendu .gif dans Go
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 !
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 }
Les commandes de construction et d'exécution sont :
go build .\main.go .\main.exe > out.gif
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() }
ou
func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) w.Flush() os.Stdout.Close() }
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!