• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    go语言制作一个gif动态图

    如题,关键不是图怎么样,而是说,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),
      })
    }
    

    以上就是本文的全部内容了,希望大家能够喜欢。

    您可能感兴趣的文章:
    • Android下录制App操作生成Gif动态图的全过程
    • PHP判断一个gif图片是否为动态图片的方法
    • java实现gif动画效果(java显示动态图片)
    • 浅析IOS中播放gif动态图的方法
    • Matlab制作视频并转换成gif动态图的两种方法
    上一篇:go语言制作端口扫描器
    下一篇:go语言制作的zip压缩程序
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    go语言制作一个gif动态图 语言,制作,一个,gif,动态,