亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

go語言制作一個gif動態圖

2020-04-01 19:15:05
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了go制作一個gif動態圖的相關資料,需要的朋友可以參考下

如題,關鍵不是圖怎么樣,而是說,go可以拿來實現動態圖驗證碼,加上go支持cgi、fcgi,完全可以做個exe拿去增補現有的服務器么。

ball.go

 

  1. package main 
  2. import ( 
  3. "github.com/hydra13142/cube" 
  4. "github.com/hydra13142/geom" 
  5. "github.com/hydra13142/paint" 
  6. "image" 
  7. "image/color/palette" 
  8. "image/gif" 
  9. "math" 
  10. "os" 
  11. var ( 
  12. pln *cube.Plain 
  13. unx cube.Vector 
  14. uny cube.Vector 
  15. const ( 
  16. H = 18 
  17. W = 36 
  18. func init() { 
  19. pln, _ = cube.NewPlain(cube.Point{}, cube.Vector{4, 4, 3}) 
  20. uny = cube.FromTo(cube.Point{}, pln.VerticalPoint(cube.Point{0, 0, 10})).Unit() 
  21. unx = cube.OuterProduct(uny, cube.Vector{4, 4, 3}).Unit() 
  22. func main() { 
  23. var x [H + 1][W]cube.Point 
  24. var y [H + 1][W]geom.Point 
  25. dz := math.Pi / H 
  26. dxy := math.Pi * 2 / W 
  27. for i := 0; i <= H; i++ { 
  28. az := float64(i)*dz - math.Pi/2 
  29. r := 140 * math.Cos(az) 
  30. z := 140 * math.Sin(az) 
  31. for j := 0; j < W; j++ { 
  32. axy := float64(j) * dxy 
  33. x[i][j] = cube.Point{math.Cos(axy) * r, math.Sin(axy) * r, z} 
  34. pics := make([]*image.Paletted, 0, 20) 
  35. img := paint.Image{ 
  36. FR: paint.Green, 
  37. BG: paint.White, 
  38. stp := dxy / 20 
  39. delay := make([]int, 0, 20) 
  40. for t := 0; t < 20; t++ { 
  41. img.Image = image.NewPaletted(image.Rect(0, 0, 300, 300), palette.Plan9) 
  42. for i := 0; i <= H; i++ { 
  43. for j := 0; j < W; j++ { 
  44. ox := cube.FromTo(cube.Point{}, x[i][j]) 
  45. y[i][j] = geom.Point{cube.InnerProduct(ox, unx), cube.InnerProduct(ox, uny)} 
  46. a, b := x[i][j].X, x[i][j].Y 
  47. x[i][j].X = a*math.Cos(stp) - b*math.Sin(stp) 
  48. x[i][j].Y = b*math.Cos(stp) + a*math.Sin(stp) 
  49. for i := 0; i < H; i++ { 
  50. for j := 0; j < W; j++ { 
  51. img.Line( 
  52. 150+int(y[i][j].X), 
  53. 150-int(y[i][j].Y), 
  54. 150+int(y[i][(j+1)%W].X), 
  55. 150-int(y[i][(j+1)%W].Y), 
  56. img.Line( 
  57. 150+int(y[i][j].X), 
  58. 150-int(y[i][j].Y), 
  59. 150+int(y[i+1][j].X), 
  60. 150-int(y[i+1][j].Y), 
  61. pics = append(pics, img.Image.(*image.Paletted)) 
  62. delay = append(delay, 5) 
  63. file, _ := os.Create("ball.gif"
  64. defer file.Close() 
  65. gif.EncodeAll(file, &gif.GIF{ 
  66. Image: pics, 
  67. Delay: delay, 
  68. LoopCount: 5 * len(delay), 
  69. }) 

woniu.go

 

 
  1. package main 
  2. import ( 
  3. "github.com/hydra13142/cube" 
  4. "github.com/hydra13142/geom" 
  5. "github.com/hydra13142/paint" 
  6. "image" 
  7. "image/color/palette" 
  8. "image/gif" 
  9. "math" 
  10. "os" 
  11. var ( 
  12. pln *cube.Plain 
  13. unx, uny cube.Vector 
  14. const ( 
  15. H = 18 
  16. W = 96 
  17. func init() { 
  18. pln, _ = cube.NewPlain(cube.Point{}, cube.Vector{2, 2, 1}) 
  19. uny = cube.FromTo(cube.Point{}, pln.VerticalPoint(cube.Point{0, 0, 10})).Unit() 
  20. unx = cube.OuterProduct(uny, cube.Vector{2, 2, 1}).Unit() 
  21. func main() { 
  22. var x [H + 1][W]cube.Point 
  23. var y [H + 1][W]geom.Point 
  24. dz := math.Pi / H 
  25. dxy := math.Pi * 4 / W 
  26. for i := 0; i <= H; i++ { 
  27. az := float64(i)*dz - math.Pi/2 
  28. r := 300 * math.Cos(az) 
  29. z := 100 * math.Sin(az) 
  30. for j := 0; j < W; j++ { 
  31. axy := float64(j) * dxy 
  32. R := float64(j) * r / W 
  33. x[i][j] = cube.Point{math.Cos(axy) * R, math.Sin(axy) * R, z} 
  34. pics := make([]*image.Paletted, 0, 20) 
  35. img := paint.Image{ 
  36. FR: paint.Green, 
  37. BG: paint.White, 
  38. stp := math.Pi / W 
  39. delay := make([]int, 0, 2*W) 
  40. for t := 0; t < 2*W; t++ { 
  41. img.Image = image.NewPaletted(image.Rect(0, 0, 600, 300), palette.Plan9) 
  42. for i := 0; i <= H; i++ { 
  43. for j := 0; j < W; j++ { 
  44. ox := cube.FromTo(cube.Point{}, x[i][j]) 
  45. y[i][j] = geom.Point{cube.InnerProduct(ox, unx), cube.InnerProduct(ox, uny)} 
  46. a, b := x[i][j].X, x[i][j].Y 
  47. x[i][j].X = a*math.Cos(stp) - b*math.Sin(stp) 
  48. x[i][j].Y = b*math.Cos(stp) + a*math.Sin(stp) 
  49. img.Line( 
  50. 300+int(y[0][0].X), 
  51. 150-int(y[0][0].Y), 
  52. 300+int(y[H][0].X), 
  53. 150-int(y[H][0].Y), 
  54. for i := 0; i < H; i++ { 
  55. for j := 1; j < W; j++ { 
  56. img.Line( 
  57. 300+int(y[i][j].X), 
  58. 150-int(y[i][j].Y), 
  59. 300+int(y[i][j-1].X), 
  60. 150-int(y[i][j-1].Y), 
  61. img.Line( 
  62. 300+int(y[i][j].X), 
  63. 150-int(y[i][j].Y), 
  64. 300+int(y[i+1][j].X), 
  65. 150-int(y[i+1][j].Y), 
  66. pics = append(pics, img.Image.(*image.Paletted)) 
  67. delay = append(delay, 5) 
  68. file, _ := os.Create("woniu.gif"
  69. defer file.Close() 
  70. gif.EncodeAll(file, &gif.GIF{ 
  71. Image: pics, 
  72. Delay: delay, 
  73. LoopCount: 5 * len(delay), 
  74. }) 

rotate.go

 

 
  1. package main 
  2. import ( 
  3. "github.com/hydra13142/cube" 
  4. "github.com/hydra13142/geom" 
  5. "github.com/hydra13142/paint" 
  6. "image" 
  7. "image/color/palette" 
  8. "image/gif" 
  9. "math" 
  10. "os" 
  11. var ( 
  12. pln *cube.Plain 
  13. unx, uny cube.Vector 
  14. const ( 
  15. H = 9 
  16. W = 36 
  17. func init() { 
  18. pln, _ = cube.NewPlain(cube.Point{}, cube.Vector{4, 4, 3}) 
  19. uny = cube.FromTo(cube.Point{}, pln.VerticalPoint(cube.Point{0, 0, 10})).Unit() 
  20. unx = cube.OuterProduct(uny, cube.Vector{4, 4, 3}).Unit() 
  21. func main() { 
  22. var x [H*W + 1]cube.Point 
  23. var y [H*W + 1]geom.Point 
  24. dxy := (math.Pi * 2) / W 
  25. dz := math.Pi / H 
  26. for i := 0; i <= H*W; i++ { 
  27. az := float64(i)*dz/W - math.Pi/2 
  28. r := 140 * math.Cos(az) 
  29. z := 140 * math.Sin(az)  
  30. axy := float64(i) * dxy 
  31. x[i] = cube.Point{math.Cos(axy) * r, math.Sin(axy) * r, z} 
  32. pics := make([]*image.Paletted, 0, 20) 
  33. img := paint.Image{ 
  34. FR: paint.Green, 
  35. BG: paint.White, 
  36. stp := math.Pi * 2 / (W * 3) 
  37. delay := make([]int, 0, 3*W) 
  38. for t := 0; t < 3*W; t++ { 
  39. img.Image = image.NewPaletted(image.Rect(0, 0, 300, 300), palette.Plan9) 
  40. for i := 0; i <= H*W; i++ { 
  41. ox := cube.FromTo(cube.Point{}, x[i]) 
  42. y[i] = geom.Point{cube.InnerProduct(ox, unx), cube.InnerProduct(ox, uny)} 
  43. a, b := x[i].X, x[i].Z 
  44. x[i].X = a*math.Cos(stp) - b*math.Sin(stp) 
  45. x[i].Z = b*math.Cos(stp) + a*math.Sin(stp) 
  46. img.Line( 
  47. 150+int(y[0].X), 
  48. 150-int(y[0].Y), 
  49. 150+int(y[H*W].X), 
  50. 150-int(y[H*W].Y), 
  51. for i := 0; i < H*W; i++ { 
  52. img.Line( 
  53. 150+int(y[i].X), 
  54. 150-int(y[i].Y), 
  55. 150+int(y[i+1].X), 
  56. 150-int(y[i+1].Y), 
  57. pics = append(pics, img.Image.(*image.Paletted)) 
  58. delay = append(delay, 8) 
  59. file, _ := os.Create("rotate.gif"
  60. defer file.Close() 
  61. gif.EncodeAll(file, &gif.GIF{ 
  62. Image: pics, 
  63. Delay: delay, 
  64. LoopCount: 5 * len(delay), 
  65. }) 

以上就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品成人va在线观看| 亚洲va电影大全| 97碰碰碰免费色视频| 国产伦精品免费视频| 欧美劲爆第一页| 少妇高潮 亚洲精品| 久久精品夜夜夜夜夜久久| 午夜欧美不卡精品aaaaa| 国产日韩一区在线| 中文字幕在线成人| 日韩电影免费观看中文字幕| 日韩欧美国产视频| 久久久成人av| 国产精品中文在线| 亚洲色图国产精品| 国产精品视频播放| 羞羞色国产精品| 亚洲精品国产精品国自产观看浪潮| 日韩欧美中文在线| 亚洲人成免费电影| 中日韩美女免费视频网址在线观看| 亚洲精品日韩久久久| 亚洲日本中文字幕| 97人人爽人人喊人人模波多| 国模视频一区二区三区| 亚洲精品国精品久久99热| 日韩成人av在线| 国模视频一区二区| 欧美激情videoshd| 国产精品免费视频xxxx| 国产精品xxx视频| 国产一级揄自揄精品视频| 日本视频久久久| 欧美成人精品三级在线观看| 夜色77av精品影院| 在线精品国产成人综合| 欧美激情视频网址| 欧美床上激情在线观看| 精品久久国产精品| 欧美黑人xxxⅹ高潮交| 欧美成人手机在线| 亚洲摸下面视频| 日本精品视频网站| 久久精品最新地址| 国产在线播放不卡| 国产视频精品一区二区三区| 日韩在线观看精品| 亚洲午夜精品久久久久久久久久久久| 日韩精品在线影院| 97国产精品久久| 国产日韩欧美一二三区| 国产成人在线一区| 成人福利在线观看| 国产精品露脸av在线| 国产日本欧美在线观看| 欧美黄色小视频| 亚洲另类欧美自拍| 中文字幕少妇一区二区三区| 一区二区三区国产视频| 久久免费视频在线观看| 成人免费网站在线看| 久久精品影视伊人网| 国产精品久久国产精品99gif| 国产成人亚洲综合| 欧美制服第一页| 另类视频在线观看| 欧美成人免费va影院高清| 亚洲国产欧美久久| 精品亚洲va在线va天堂资源站| 亚洲精品乱码久久久久久按摩观| 欧美一性一乱一交一视频| 国产不卡视频在线| 神马国产精品影院av| 在线播放日韩欧美| 久久久久久久久爱| 亚洲精品456在线播放狼人| 日韩精品视频在线观看网址| 日本一区二区在线播放| 国产午夜精品美女视频明星a级| 日韩在线视频观看正片免费网站| 久久久久久久久久国产精品| 中文字幕最新精品| 欧美日韩加勒比精品一区| 亚洲色图第三页| 亚洲一区二区三区xxx视频| 成人写真福利网| 91精品国产自产91精品| 成人黄色av播放免费| 久久成人人人人精品欧| 国产成人a亚洲精品| 精品国产乱码久久久久久婷婷| 亚洲性av网站| 欧美成人午夜剧场免费观看| 国产乱肥老妇国产一区二| 欧美在线视频观看免费网站| 成人精品一区二区三区电影黑人| 91久久久久久久一区二区| 福利一区福利二区微拍刺激| 国产精品男人爽免费视频1| 日韩高清中文字幕| 中文字幕亚洲综合久久筱田步美| 国产热re99久久6国产精品| 国产精品久久9| 91黑丝高跟在线| 日韩视频一区在线| 91在线视频一区| xvideos成人免费中文版| 亚洲欧美日韩一区二区在线| 成年无码av片在线| 亚洲精品一区二区在线| 亚洲一区二区三区成人在线视频精品| 国产精品影院在线观看| 国产成人精品一区二区在线| 国产精品免费久久久久久| 国产成人avxxxxx在线看| 国产精品免费一区二区三区都可以| 亚洲人成在线免费观看| 91精品久久久久久久| 国产视频精品va久久久久久| 日韩av在线看| 久久香蕉国产线看观看网| 国产婷婷色综合av蜜臀av| 欧洲精品久久久| 国产ts一区二区| 欧美色videos| 久久久电影免费观看完整版| 在线观看日韩www视频免费| 亚洲美女av在线| 欧美激情精品久久久久久蜜臀| 欧美在线视频网| 成人h片在线播放免费网站| 高清日韩电视剧大全免费播放在线观看| 在线不卡国产精品| 亚洲精品日韩激情在线电影| 国产精品久久久久免费a∨大胸| 国产一区二区三区四区福利| 亚洲成人av在线播放| 性夜试看影院91社区| 欧美激情国产日韩精品一区18| 亚洲精品久久久久国产| 亚洲精品98久久久久久中文字幕| 国产精品电影网| 亚洲欧美精品伊人久久| 97香蕉久久夜色精品国产| 欧美疯狂做受xxxx高潮| 国产精品自产拍在线观看| 国产手机视频精品| 国产成人精品国内自产拍免费看| 不卡毛片在线看| 国产精品99久久久久久白浆小说| 2019中文字幕在线免费观看| 激情久久av一区av二区av三区| 26uuu国产精品视频| 成人h视频在线| 中文字幕久精品免费视频| 国产噜噜噜噜噜久久久久久久久| 视频在线观看99| 欧美老妇交乱视频| 日韩视频免费在线| 亚洲乱亚洲乱妇无码| 国产精品www网站| 国产精品久久久久久久久久久久久| 国产亚洲激情视频在线| 97视频com|