.gif in Go rendern

PHPz
Freigeben: 2024-02-09 08:45:29
nach vorne
889 Leute haben es durchsucht

在 Go 中渲染 .gif

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!

Frageninhalt

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
}
Nach dem Login kopieren

Die Build- und Run-Befehle sind:

go build .\main.go
.\main.exe > out.gif
Nach dem Login kopieren

Lösung

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()

}
Nach dem Login kopieren

oder

func main() {
    w := bufio.NewWriter(os.Stdout)
    lissajous(w)
    w.Flush()
    os.Stdout.Close()
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!