go中的WebP编码器/解码器

时间:2011-12-01 11:38:09

标签: go

是否有某个完整的WebP编码器和解码器与当前的每周(或可分叉)兼容?

速度是否与标准png相当?

5 个答案:

答案 0 :(得分:4)

这个人在GitHub上有一个包,包括编码器和WebP的解码器: https://github.com/chai2010/webp

来自自述文件:

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)
    }
}

答案 1 :(得分:1)

找到了this,虽然我不确定这是不是你想要的。此外,它似乎缺少一个编码器+它可能已经过时了当前的Go版本/每周版本。

答案 2 :(得分:1)

行。 经过长时间的搜索,我可以说即使编写了解码器(https://github.com/golang/image/blob/master/webp/decode.go),仍然没有公开的编码器。

答案 3 :(得分:1)

对于那些正在寻找更多使用webp解码器/编码器的软件包的人。

在提到的@orcaman包旁边,还有:

https://godoc.org/github.com/harukasan/go-libwebp/webp

https://github.com/harukasan/go-libwebp

有一段时间没有更新,但是使用本地安装的libwebp。

答案 4 :(得分:0)

Go Authors实际上(2014/11)将webp添加到他们的附加go" image" repo(bmp / tiff / webP):

https://github.com/golang/image

编辑:显然,repo不包含任何webp编码器/似乎只是读者。

(到目前为止,Haven还没有对网络代码进行过测试。在生产中使用之前,可能需要多花些时间进行4次测试。)