DDR爱好者之家 Design By 杰米
如题,关键不是图怎么样,而是说,go可以拿来实现动态图验证码,加上go支持cgi、fcgi,完全可以做个exe拿去增补现有的服务器么。
ball.go
package main import ( "github.com/hydra13142/cube" "github.com/hydra13142/geom" "github.com/hydra13142/paint" "image" "image/color/palette" "image/gif" "math" "os" ) var ( pln *cube.Plain unx cube.Vector uny cube.Vector ) const ( H = 18 W = 36 ) func init() { pln, _ = cube.NewPlain(cube.Point{}, cube.Vector{4, 4, 3}) uny = cube.FromTo(cube.Point{}, pln.VerticalPoint(cube.Point{0, 0, 10})).Unit() unx = cube.OuterProduct(uny, cube.Vector{4, 4, 3}).Unit() } func main() { var x [H + 1][W]cube.Point var y [H + 1][W]geom.Point dz := math.Pi / H dxy := math.Pi * 2 / W for i := 0; i <= H; i++ { az := float64(i)*dz - math.Pi/2 r := 140 * math.Cos(az) z := 140 * math.Sin(az) for j := 0; j < W; j++ { axy := float64(j) * dxy x[i][j] = cube.Point{math.Cos(axy) * r, math.Sin(axy) * r, z} } } pics := make([]*image.Paletted, 0, 20) img := paint.Image{ FR: paint.Green, BG: paint.White, } stp := dxy / 20 delay := make([]int, 0, 20) for t := 0; t < 20; t++ { img.Image = image.NewPaletted(image.Rect(0, 0, 300, 300), palette.Plan9) for i := 0; i <= H; i++ { for j := 0; j < W; j++ { ox := cube.FromTo(cube.Point{}, x[i][j]) y[i][j] = geom.Point{cube.InnerProduct(ox, unx), cube.InnerProduct(ox, uny)} a, b := x[i][j].X, x[i][j].Y x[i][j].X = a*math.Cos(stp) - b*math.Sin(stp) x[i][j].Y = b*math.Cos(stp) + a*math.Sin(stp) } } for i := 0; i < H; i++ { for j := 0; j < W; j++ { img.Line( 150+int(y[i][j].X), 150-int(y[i][j].Y), 150+int(y[i][(j+1)%W].X), 150-int(y[i][(j+1)%W].Y), ) img.Line( 150+int(y[i][j].X), 150-int(y[i][j].Y), 150+int(y[i+1][j].X), 150-int(y[i+1][j].Y), ) } } pics = append(pics, img.Image.(*image.Paletted)) delay = append(delay, 5) } file, _ := os.Create("ball.gif") defer file.Close() gif.EncodeAll(file, &gif.GIF{ Image: pics, Delay: delay, LoopCount: 5 * len(delay), }) }
woniu.go
package main import ( "github.com/hydra13142/cube" "github.com/hydra13142/geom" "github.com/hydra13142/paint" "image" "image/color/palette" "image/gif" "math" "os" ) var ( pln *cube.Plain unx, uny cube.Vector ) const ( H = 18 W = 96 ) func init() { pln, _ = cube.NewPlain(cube.Point{}, cube.Vector{2, 2, 1}) uny = cube.FromTo(cube.Point{}, pln.VerticalPoint(cube.Point{0, 0, 10})).Unit() unx = cube.OuterProduct(uny, cube.Vector{2, 2, 1}).Unit() } func main() { var x [H + 1][W]cube.Point var y [H + 1][W]geom.Point dz := math.Pi / H dxy := math.Pi * 4 / W for i := 0; i <= H; i++ { az := float64(i)*dz - math.Pi/2 r := 300 * math.Cos(az) z := 100 * math.Sin(az) for j := 0; j < W; j++ { axy := float64(j) * dxy R := float64(j) * r / W x[i][j] = cube.Point{math.Cos(axy) * R, math.Sin(axy) * R, z} } } pics := make([]*image.Paletted, 0, 20) img := paint.Image{ FR: paint.Green, BG: paint.White, } stp := math.Pi / W delay := make([]int, 0, 2*W) for t := 0; t < 2*W; t++ { img.Image = image.NewPaletted(image.Rect(0, 0, 600, 300), palette.Plan9) for i := 0; i <= H; i++ { for j := 0; j < W; j++ { ox := cube.FromTo(cube.Point{}, x[i][j]) y[i][j] = geom.Point{cube.InnerProduct(ox, unx), cube.InnerProduct(ox, uny)} a, b := x[i][j].X, x[i][j].Y x[i][j].X = a*math.Cos(stp) - b*math.Sin(stp) x[i][j].Y = b*math.Cos(stp) + a*math.Sin(stp) } } img.Line( 300+int(y[0][0].X), 150-int(y[0][0].Y), 300+int(y[H][0].X), 150-int(y[H][0].Y), ) for i := 0; i < H; i++ { for j := 1; j < W; j++ { img.Line( 300+int(y[i][j].X), 150-int(y[i][j].Y), 300+int(y[i][j-1].X), 150-int(y[i][j-1].Y), ) img.Line( 300+int(y[i][j].X), 150-int(y[i][j].Y), 300+int(y[i+1][j].X), 150-int(y[i+1][j].Y), ) } } pics = append(pics, img.Image.(*image.Paletted)) delay = append(delay, 5) } file, _ := os.Create("woniu.gif") defer file.Close() gif.EncodeAll(file, &gif.GIF{ Image: pics, Delay: delay, LoopCount: 5 * len(delay), }) }
rotate.go
package main import ( "github.com/hydra13142/cube" "github.com/hydra13142/geom" "github.com/hydra13142/paint" "image" "image/color/palette" "image/gif" "math" "os" ) var ( pln *cube.Plain unx, uny cube.Vector ) const ( H = 9 W = 36 ) func init() { pln, _ = cube.NewPlain(cube.Point{}, cube.Vector{4, 4, 3}) uny = cube.FromTo(cube.Point{}, pln.VerticalPoint(cube.Point{0, 0, 10})).Unit() unx = cube.OuterProduct(uny, cube.Vector{4, 4, 3}).Unit() } func main() { var x [H*W + 1]cube.Point var y [H*W + 1]geom.Point dxy := (math.Pi * 2) / W dz := math.Pi / H for i := 0; i <= H*W; i++ { az := float64(i)*dz/W - math.Pi/2 r := 140 * math.Cos(az) z := 140 * math.Sin(az) axy := float64(i) * dxy x[i] = cube.Point{math.Cos(axy) * r, math.Sin(axy) * r, z} } pics := make([]*image.Paletted, 0, 20) img := paint.Image{ FR: paint.Green, BG: paint.White, } stp := math.Pi * 2 / (W * 3) delay := make([]int, 0, 3*W) for t := 0; t < 3*W; t++ { img.Image = image.NewPaletted(image.Rect(0, 0, 300, 300), palette.Plan9) for i := 0; i <= H*W; i++ { ox := cube.FromTo(cube.Point{}, x[i]) y[i] = geom.Point{cube.InnerProduct(ox, unx), cube.InnerProduct(ox, uny)} a, b := x[i].X, x[i].Z x[i].X = a*math.Cos(stp) - b*math.Sin(stp) x[i].Z = b*math.Cos(stp) + a*math.Sin(stp) } img.Line( 150+int(y[0].X), 150-int(y[0].Y), 150+int(y[H*W].X), 150-int(y[H*W].Y), ) for i := 0; i < H*W; i++ { img.Line( 150+int(y[i].X), 150-int(y[i].Y), 150+int(y[i+1].X), 150-int(y[i+1].Y), ) } pics = append(pics, img.Image.(*image.Paletted)) delay = append(delay, 8) } file, _ := os.Create("rotate.gif") defer file.Close() gif.EncodeAll(file, &gif.GIF{ Image: pics, Delay: delay, LoopCount: 5 * len(delay), }) }
以上就是本文的全部内容了,希望大家能够喜欢。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年05月02日
2024年05月02日
- 陈婧霏.2024-春色(EP)【有此山文化】【FLAC分轨】
- 郭富城.2000-无忌VS未来(EP)【华纳】【WAV+CUE】
- 群星.2003-追忆林振强3CD【华纳】【WAV+CUE】
- 群星《17号音乐仓库2 第9期》[FLAC/分轨][366.65MB]
- 徐凤仪《在角落唱着歌》[320K/MP3][98.68MB]
- 徐凤仪《在角落唱着歌》[FLAC/分轨][244.43MB]
- 【柔顺爵士(P)】Streetwize-2024-LiftMeUp(FLAC)
- 【爵士沙发】Magmatunes-2024-FlyingHigh(FLAC)
- 玖月奇迹《试音天碟K2母带》[WAV+CUE]
- 张美玲.1998-世界第一等【南方】【WAV+CUE】
- 梦剧院.1988-飘去夏天(2018三十周年纪念版)【乐意唱片】【WAV+CUE】
- 云朵.2011-云朵【啊呀啦嗦】【WAV+CUE】
- 群星.1998-琼瑶98年度主题曲精选大碟【上华】【WAV+CUE】
- 胡鸿钧.2023-我们在结束时开始新曲+精丫TVB.MUSIC】【WAV+CUE】
- 任洁玲.1995-我们有没有爱过【飞碟】【WAV+CUE】