Memaparkan .gif dalam Go

PHPz
Lepaskan: 2024-02-09 08:45:29
ke hadapan
889 orang telah melayarinya

在 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
}
Salin selepas log masuk

Arahan bina dan jalankan ialah:

go build .\main.go
.\main.exe > out.gif
Salin selepas log masuk

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

}
Salin selepas log masuk

atau

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

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

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!