采用golang的image,image/gif包很容易创建gif图片,参考艾伦的书,写demo如下:
package main
import (
"image"
"image/color"
"image/gif"
"os"
)
var palette=[]color.Color{color.White,color.Black,color.RGBA{0x22,0xCC,0x33,0xff}}
func main(){
const (
nframes =100
delay = 8
size = 200
)
phase :=0
anim :=gif.GIF{LoopCount:nframes}
for i:=0;i<nframes;i++ {
rect :=image.Rect(0,0,size+1,size+1)
img :=image.NewPaletted(rect,palette)
for t:=0;t<size;t++ {
x:=phase
y:=t
img.SetColorIndex(x,y,1)
}
phase+=size/nframes
anim.Delay=append(anim.Delay,delay)
anim.Image=append(anim.Image,img)
}
var filename ="test.gif"
if len(os.Args)>1 {
filename =os.Args[1]+".gif"
}
file,_:=os.Create(filename)
defer file.Close()
gif.EncodeAll(file,&anim)
}
其中palette是画板的颜色数组,白色是底色,数组的index为1的是黑色,即画笔的颜色,在img.SetColorIndex中,1表示的是黑色,2表示颜色{0x22,0xCC,0x33,0xff},为亮绿色。
nframes表示gif图片的帧数,delay表示帧间的时间间隔,size表示图像的大小。
anim是GIF图片的结构体,有3个属性,LoopCount,Delay,Image
双重循环,来设置gif图像的内容,y为一条竖线,x是让这条竖线随时间移动。
最后是输出文件名,使用方法如下:
go build gif.go
./gif test1
输出图片如下: