gopl-Exercise1.5: Animated GIFs
来源:互联网 发布:麻瓜编程第一本python 编辑:程序博客网 时间:2024/06/05 04:11
本文主要用来记录Golang学习中,Animated GIFs的小节作业。
源码
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.// License: https://creativecommons.org/licenses/by-nc-sa/4.0/// Run with "web" command-line argument for web server.// See page 13.//!+main// Lissajous generates GIF animations of random Lissajous figures.package mainimport ( "image" "image/color" "image/gif" "io" "math" "math/rand" "os")//!-main// Packages not needed by version in book.import ( "log" "net/http" "time")//!+main// var palette = []color.Color{color.White, color.Black}var palette = []color.Color{color.Black, color.RGBA{0x00, 0xff, 0x00, 0xff}}const ( // whiteIndex = 0 // first color in palette // blackIndex = 1 // next color in palette blackIndex = 0 greenIndex = 1)func main() { //!-main // The sequence of images is deterministic unless we seed // the pseudo-random number generator using the current time. // Thanks to Randall McPherson for pointing out the omission. rand.Seed(time.Now().UTC().UnixNano()) if len(os.Args) > 1 && os.Args[1] == "web" { //!+http handler := func(w http.ResponseWriter, r *http.Request) { lissajous(w) } http.HandleFunc("/", handler) //!-http log.Fatal(http.ListenAndServe("localhost:8000", nil)) return } //!+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) img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5), greenIndex) } phase += 0.1 anim.Delay = append(anim.Delay, delay) anim.Image = append(anim.Image, img) } gif.EncodeAll(out, &anim) // NOTE: ignoring encoding errors}//!-main
运行
$ go build$ ./lissajous.exe web
浏览器查看效果
在浏览器的地址栏中输入localhost:8000
,并回车。
每次刷新网页,将看到不同样式的利萨茹曲线。
参考
- 利萨茹曲线
- golang-image-color-palette
阅读全文
0 0
- gopl-Exercise1.5: Animated GIFs
- gopl-Exercise1.7-9: Fetch
- 【计算机视觉文章阅读之二】Video2Gif: Automatic Generation of Animated GIFs from Video_CVPR2016
- exercise1
- SSD3-exercise1
- SSD5 exercise1
- exercise1-17
- exercise1-19
- exercise1-16
- exercise1-18
- Exercise1.1.22
- python exercise1
- animated-rotate
- animated库
- 卡耐基 ssd6 exercise1
- Icarnegie SSD4 Exercise1 Answer
- 分支选择结构Exercise1
- SSD6 exercise1 解题思路
- svn客户端 cornerstone 配置
- java集合框架02
- STM32系统滴答_及不可不知的延时技巧
- php composer.phar require加入插件报错,解决方法
- 【web服务器搭建】用MAMP和WAMP搭建Web环境
- gopl-Exercise1.5: Animated GIFs
- 面试笔试相关收集整理
- linux删除乱码文件
- Android low memory killer 详解
- 手机接入gsm基站流程
- java反射机制简析
- 用H5实现下拉框
- 爱很简单
- Redis(二)