In the Go language, rendering .gif files is a common task. The .gif file is a common dynamic picture format that can present dynamic effects by switching between consecutive image frames. In the Go language, we can use some libraries to process and render .gif files to achieve customized animation effects. This article will introduce how to render .gif files in Go language, and provide some sample code and techniques to help you better understand and apply this feature. Whether you are a beginner or an experienced developer, this article will provide you with helpful reference and guidance. Let's explore the secrets of rendering .gif files in Go language!
I'm trying to get the code sample to work. It comes from the "go programming language" (https://github.com/adonovan/gopl.io/blob/1ae3ec64947b7a5331b186f1b1138fc98c0f1c06/ch1/lissajous/main.go). When trying to view the animation, the gif is not rendered. gif rendering software error:
.gif Have the standards changed since 2016, or am I doing something wrong?
// 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 }
The build and run commands are:
go build .\main.go .\main.exe > out.gif
Usebufio.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() }
or
func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) w.Flush() os.Stdout.Close() }
The above is the detailed content of Rendering .gif in Go. For more information, please follow other related articles on the PHP Chinese website!