GitHub has a package for this guy that includes both an encoder and a decoder for WebP: https://github.com/chai2010/webp
From the readme file:
package main import ( "bytes" "fmt" "io/ioutil" "log" "github.com/chai2010/webp" ) func main() { var buf bytes.Buffer var width, height int var data []byte var err error // Load file data if data, err = ioutil.ReadFile("./testdata/1_webp_ll.webp"); err != nil { log.Println(err) } // GetInfo if width, height, _, err = webp.GetInfo(data); err != nil { log.Println(err) } fmt.Printf("width = %d, height = %d\n", width, height) // GetMetadata if metadata, err := webp.GetMetadata(data, "ICCP"); err != nil { fmt.Printf("Metadata: err = %v\n", err) } else { fmt.Printf("Metadata: %s\n", string(metadata)) } // Decode webp m, err := webp.Decode(bytes.NewReader(data)) if err != nil { log.Println(err) } // Encode lossless webp if err = webp.Encode(&buf, m, &webp.Options{Lossless: true}); err != nil { log.Println(err) } if err = ioutil.WriteFile("output.webp", buf.Bytes(), 0666); err != nil { log.Println(err) } }
source share