Heim >Backend-Entwicklung >Golang >.gif in Go rendern
In der Go-Sprache ist das Rendern von GIF-Dateien eine häufige Aufgabe. Die GIF-Datei ist ein gängiges dynamisches Bildformat, das durch Wechsel zwischen aufeinanderfolgenden Bildrahmen dynamische Effekte erzielen kann. In der Go-Sprache können wir einige Bibliotheken verwenden, um GIF-Dateien zu verarbeiten und zu rendern, um benutzerdefinierte Animationseffekte zu erzielen. In diesem Artikel erfahren Sie, wie Sie GIF-Dateien in der Go-Sprache rendern, und stellen einige Beispielcodes und Techniken bereit, die Ihnen helfen, diese Funktion besser zu verstehen und anzuwenden. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel bietet Ihnen hilfreiche Referenzen und Anleitungen. Lassen Sie uns die Geheimnisse des Renderns von GIF-Dateien in der Go-Sprache erkunden!
Ich versuche, das Codebeispiel zum Laufen zu bringen. Es stammt aus der „Go-Programmiersprache“ (https://github.com/adonovan/gopl.io/blob/1ae3ec64947b7a5331b186f1b1138fc98c0f1c06/ch1/lissajous/main.go). Beim Versuch, die Animation anzuzeigen, wird das GIF nicht gerendert. Fehler in der GIF-Rendering-Software:
.gif Haben sich die Standards seit 2016 geändert oder mache ich etwas falsch?
// 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 }
Die Build- und Run-Befehle sind:
go build .\main.go .\main.exe > out.gif
Verwendungbufio.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() }
oder
func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) w.Flush() os.Stdout.Close() }
Das obige ist der detaillierte Inhalt von.gif in Go rendern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!