Rumah >pembangunan bahagian belakang >Golang >Memaparkan .gif dalam Go
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!
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
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!