天天看點

圖檔生成Gif的golang小工具

有幾張照片想給搞成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)
}
           

大家可以玩一下