Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Memaparkan .gif dalam Go

Memaparkan .gif dalam Go

PHPz
PHPzke hadapan
2024-02-09 08:45:29852semak imbas

在 Go 中渲染 .gif

Dalam bahasa Go, memaparkan fail .gif ialah tugas biasa. Fail .gif ialah format gambar dinamik biasa yang boleh mempersembahkan kesan dinamik dengan menukar antara bingkai imej berturut-turut. Dalam bahasa Go, kita boleh menggunakan beberapa perpustakaan untuk memproses dan memaparkan fail .gif untuk mencapai kesan animasi tersuai. Artikel ini akan memperkenalkan cara untuk memaparkan fail .gif dalam bahasa Go dan menyediakan beberapa contoh kod serta teknik untuk membantu anda memahami dan menggunakan ciri ini dengan lebih baik. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberi anda rujukan dan panduan yang berguna. Mari terokai rahsia memaparkan fail .gif dalam bahasa Go!

Kandungan soalan

Saya cuba memastikan sampel kod berfungsi. Ia berasal daripada "bahasa pengaturcaraan go" (https://github.com/adonovan/gopl.io/blob/1ae3ec64947b7a5331b186f1b1138fc98c0f1c06/ch1/lissajous/main.go). Apabila cuba melihat animasi, gif tidak diberikan. Ralat perisian pemaparan GIF:

.gif Adakah piawaian telah berubah sejak 2016 atau adakah saya melakukan sesuatu yang salah?

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

Arahan bina dan jalankan ialah:

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

Penyelesaian

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

}

atau

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

Atas ialah kandungan terperinci Memaparkan .gif dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam