Gopl 第十章 包和工具 发表于 2019-06-01 | 更新于: 2019-08-31 | 分类于 Go 字数统计: 303 字 说明本文为GOPL第十章学习笔记 图片格式转化123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051package mainimport ( "flag" "fmt" "image" "image/gif" "image/jpeg" "image/png" "os" "strings")func main() { var format string //定义一个名为f,默认值为""的标记 //使用信息为"output format. Required. One of png, jpg, gif." //format的地址储存标记的值 //例: imgconv -f=png <1.jpg> 1.png //解释:标记f的值为png,字符串“png”写入format变量中,<1.jpg>为os.Stdin,1.png为os.Stdout flag.StringVar(&format, "f", "", "output format. Required. One of png, jpg, gif.") flag.Parse() //os.Stdin和os.Stdout不算在参数个数内 if len(flag.Args()) > 0 { fmt.Fprintln(os.Stderr, "usage: imgconv -f=png|jpg|gif < INPUT > OUTPUT") os.Exit(1) } info, _ := os.Stdout.Stat() if info.Mode()&os.ModeCharDevice != 0 { fmt.Fprintln(os.Stderr, "Refusing to write to character device. Redirect output to a pipe or regular file.") os.Exit(1) } img, _, err := image.Decode(os.Stdin) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } format = strings.ToLower(format) switch format { case "jpg", "jpeg": err = jpeg.Encode(os.Stdout, img, nil) case "png": err = png.Encode(os.Stdout, img) case "gif": err = gif.Encode(os.Stdout, img, nil) } if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) }}