有幾張照片想給搞成gif當做表情包,網上查了下golang image包的一些用法寫了個小玩意
var path, output string
var delay int
func main() {
flag.StringVar(&path, "p", "", "圖檔檔案夾路徑")
flag.StringVar(&output, "o", "output.gif", "生成gif的檔案名")
flag.IntVar(&delay, "d", , "每張圖檔的展示時間*15毫秒")
flag.Parse()
if path == "" {
fmt.Println("請輸入圖檔路徑")
flag.PrintDefaults()
return
}
files, err := ioutil.ReadDir(path)
if err != nil {
fmt.Println(err)
return
}
anim := gif.GIF{}
for _, info := range files {
//fmt.Println("add one")
f, err := os.Open(path + "/" + info.Name())
if err != nil {
fmt.Printf("Could not open file %s. Error: %s\n", info.Name(), err)
return
}
defer f.Close()
img, _, _ := image.Decode(f)
paletted := image.NewPaletted(img.Bounds(), palette.Plan9)
draw.FloydSteinberg.Draw(paletted, img.Bounds(), img, image.ZP)
anim.Image = append(anim.Image, paletted)
anim.Delay = append(anim.Delay, delay*)
}
f, _ := os.Create(output)
defer f.Close()
gif.EncodeAll(f, &anim)
}
大家可以玩一下