最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go語言制作一個(gè)gif動態(tài)圖

 更新時(shí)間:2015年03月20日 15:10:24   投稿:hebedich  
這篇文章主要介紹了go制作一個(gè)gif動態(tài)圖的相關(guān)資料,需要的朋友可以參考下

如題,關(guān)鍵不是圖怎么樣,而是說,go可以拿來實(shí)現(xiàn)動態(tài)圖驗(yàn)證碼,加上go支持cgi、fcgi,完全可以做個(gè)exe拿去增補(bǔ)現(xiàn)有的服務(wù)器么。

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),
  })
}

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

相關(guān)文章

  • Go語言指針使用分析與講解

    Go語言指針使用分析與講解

    這篇文章主要介紹了Go語言指針使用分析與講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 一文帶你深入理解Golang中的RWMutex

    一文帶你深入理解Golang中的RWMutex

    這篇文章主要為大家詳細(xì)介紹了Golang中RWMutex的相關(guān)知識,知其然,更要知其所以然。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • 從零封裝Gin框架及項(xiàng)目初始化教程

    從零封裝Gin框架及項(xiàng)目初始化教程

    這篇文章主要為大家介紹了從零封裝Gin框架及項(xiàng)目的初始化教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語言map字典用法實(shí)例分析

    Go語言map字典用法實(shí)例分析

    這篇文章主要介紹了Go語言map字典用法,實(shí)例分析了map字典的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • golang xorm日志寫入文件中的操作

    golang xorm日志寫入文件中的操作

    這篇文章主要介紹了golang xorm日志寫入文件中的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang如何實(shí)現(xiàn)mapreduce單進(jìn)程版本詳解

    golang如何實(shí)現(xiàn)mapreduce單進(jìn)程版本詳解

    這篇文章主要給大家介紹了關(guān)于golang如何實(shí)現(xiàn)mapreduce單進(jìn)程版本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 深入理解go sync.Waitgroup的使用

    深入理解go sync.Waitgroup的使用

    WaitGroup在go語言中,用于線程同步,本文主要介紹了深入理解go sync.Waitgroup的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 深入探討Golang中如何進(jìn)行并發(fā)發(fā)送HTTP請求

    深入探討Golang中如何進(jìn)行并發(fā)發(fā)送HTTP請求

    在?Golang?領(lǐng)域,并發(fā)發(fā)送?HTTP?請求是優(yōu)化?Web?應(yīng)用程序的一項(xiàng)重要技能,本文探討了實(shí)現(xiàn)此目的的各種方法,文中的示例代碼講解詳細(xì),希望對大家有所幫助
    2024-01-01
  • Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    本文主要介紹了Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 完美解決go Fscanf 在讀取文件時(shí)出現(xiàn)的問題

    完美解決go Fscanf 在讀取文件時(shí)出現(xiàn)的問題

    這篇文章主要介紹了完美解決go Fscanf 在讀取文件時(shí)出現(xiàn)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

涡阳县| 全州县| 瑞丽市| 麦盖提县| 怀来县| 花垣县| 佛教| 孙吴县| 沐川县| 阜新| 泗水县| 昭觉县| 和田县| 鄂伦春自治旗| 茂名市| 施秉县| 筠连县| 乐山市| 重庆市| 通渭县| 焉耆| 新丰县| 腾冲县| 大姚县| 保山市| 仙桃市| 南康市| 林口县| 五台县| 澄城县| 湛江市| 伊金霍洛旗| 抚州市| 张北县| 名山县| 金华市| 崇信县| 奉节县| 容城县| 会东县| 达拉特旗|