Heim  >  Artikel  >  Backend-Entwicklung  >  .gif in Go rendern

.gif in Go rendern

PHPz
PHPznach vorne
2024-02-09 08:45:29918Durchsuche

在 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
}

Die Build- und Run-Befehle sind:

go build .\main.go
.\main.exe > out.gif

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

}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen