【问题标题】:WebP encoder/decoder in goGo中的WebP编码器/解码器
【发布时间】:2012-01-10 13:30:38
【问题描述】:

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

它的速度是否与标准的 png 1 相媲美?

【问题讨论】:

  • 我在 2011 年问过这个问题,在 2012 年自己回答了这个问题,并在 2015 年接受了另一个答案。WebP 开发的速度没有预期的那么快 ;)

标签: image go webp


【解决方案1】:

这个人在 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)
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      Go 作者实际上 (2014/11) 在此处将 webp 添加到了他们的附加 go“图像”存储库 (bmp/tiff/webP) 中:

      https://github.com/golang/image

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

      (目前还没有测试过 webp 代码。在生产中使用之前可能要多留一些时间 4 测试。)

      【讨论】:

      • @destroy:你说得对:在 repo 中也找不到编码器。
      • 即使在 2021 年也不会@Abri
      【解决方案4】:

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

      【讨论】:

      • 我试过了,但它没有你所说的编码器,而且它每周都不会编译。我不明白为什么 Google Go 团队似乎忽略了 Google 推广的图像格式。
      • @dystroy:过时的代码可能是可修复的,并且 BSD-3 许可证允许一个简单的分叉,即考虑撕开解码器,然后自己编写(可能不是微不足道的)编码器 - 如果你'将无法在其他现成的地方找到它,而您确实需要它。也可以在 golang-nuts 询问可能值得一试。
      • 我认为我没有时间自己编写编码器,我什至可能没有能力理解其他语言的现有编码器(很久没有制作 C++)。即使一半的邮件列表可能已经在这里看到了这个问题,我也可能会问 golang-nuts :)
      【解决方案5】:

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

      除了@orcaman 提到的包外,还有:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2019-10-10
        • 2014-12-27
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 2018-09-08
        相关资源
        最近更新 更多