package main import ( "bytes" "image" "image/gif" "image/jpeg" "image/png" "io/ioutil" "os" "github.com/chai2010/webp" "golang.org/x/image/bmp" ) func main() { // 图片路径 file_name := `./test.webp` // 读取图片 old_file, err := os.Open(file_name) if err != nil { panic(err) } // 识别图片类型 file, image_type, _ := image.Decode(old_file) // 获取图片的类型 switch image_type { case `jpeg`: println(`这是 jpg 文件`) new_file, _ := os.Create(`./_test.jpg`) jpeg.Encode(new_file, file, nil) new_file.Close() case `png`: println(`这是 png 文件`) new_file, _ := os.Create(`./_test.png`) png.Encode(new_file, file) new_file.Close() case `gif`: println(`这是 gif 文件`) new_file, _ := os.Create(`./_test.gif`) gif.Encode(new_file, file, nil) new_file.Close() case `bmp`: println(`这是 bmp 文件`) new_file, _ := os.Create(`./_test.bmp`) bmp.Encode(new_file, file) new_file.Close() default: data, _ := ioutil.ReadFile(file_name) // 尝试以 webp 进行解码 m, err := webp.Decode(bytes.NewReader(data)) if err == nil { println(`这是 webp 文件`) var buf bytes.Buffer webp.Encode(&buf, m, nil) ioutil.WriteFile(`./_test.webp`, buf.Bytes(), 0666) } else { println(`不是 图片文件!`) } } old_file.Close() }