go x/image/webp: 支持WebP编码

i1icjdpr  于 4个月前  发布在  Go
关注(0)|答案(9)|浏览(57)

你好,

目前我们已经能够解码webp图像,这是非常好的。但是为什么我们不能编码它们呢?

考虑到PSI对于让网站排名如此关键的因素,任何服务器都应该能够转换和提供webp图像。

我现在不得不绕过一些障碍,使用webp可执行文件,这远非理想状态。

请添加一个编码器!

非常感谢。

knpiaxh1

knpiaxh12#

WebP编码器的工作量很大。如果有人想编写一个,那将是非常棒的。但据我所知,没有人正在进行这项工作。

fafcakar

fafcakar3#

遗憾的是,尽管我理解这可能需要一些工作,但考虑到webp和go都是你们制作的,它感觉应该可以直接使用。
在使用第三方包将文件转换为webp时添加C绑定可能会很混乱,同样使用可执行文件也是如此。
我很想提供帮助来为/x/image库做出贡献,但不知道从何开始。

kfgdxczn

kfgdxczn4#

我明白这可能需要一些工作
这不是一点点工作。正如伊恩所说,这是大量的工作。:-)

0s0u357o

0s0u357o5#

这真是遗憾,虽然我理解这可能需要一些工作,但考虑到webp和go都是你们制作的,它应该可以开箱即用。
使用第三方包在转换为webp时添加C绑定可能会很混乱,同样使用可执行文件也是如此。
好消息是图像编码比图像解码在安全性方面要少很多陷阱,这仅仅是因为输入格式(位图)要简单得多。
话虽如此,你是否考虑过ImageFlow?它是免费软件(AGPL),既可作为守护进程,也可作为库提供。也有商业许可证可供选择。

uyto3xhc

uyto3xhc6#

开始一个新的网站项目,使用Go后端,并计划使用WebP作为图像缩略图,看到没有原生编码器真的很遗憾。:(
我真的很想避免使用C绑定(由于性能和内存安全方面的担忧),但似乎目前唯一的选择就是执行官方的webp二进制文件,这也不是一个好主意,因为你要么将文件写入磁盘,要么想出一个复杂的虚拟文件系统来实现它。
我还考虑过using Rust,但那对我来说太高级了。
编辑:我找到了https://github.com/nickalie/go-webpbin,看起来相当不错。不过还没有测试过。

o7jaxewo

o7jaxewo7#

Jack Mordaunt 能否提供一个潜在的解决方案?我知道用 Go 重写 libwebp 将非常耗时,但 Jack Mordaunt 利用了 ccgo,并成功地将 libwebp 的 C 代码移植到了原生的 Go 代码中,使其功能正常。如果我理解正确的话。我不是Maven,不确定这种方法可能带来的任何潜在风险,但我想分享这个想法。@JackMordaunt

rsl1atfo

rsl1atfo8#

我认为有一个更好的解决方案。例如,可以使用C语言库中的c-bindings。

pu3pd22g

pu3pd22g9#

Jack Mordaunt 是否能提供一个潜在的解决方案?我知道用 Go 重写 libwebp 会非常耗时,但 Jack Mordaunt 利用了 ccgo,并成功地将 libwebp 的 C 代码移植到了原生的 Go 代码中,使其功能正常。如果我理解正确的话。我不是Maven,不确定这种方法可能带来的任何潜在风险,但我想分享这个想法。@JackMordaunt
感谢参考!
是的,它是功能正常的。然而,转译方法有很多缺点,使得它无法成为官方的东西。

  • 它依赖于 ccgo 进行转译,这是一个正在开发中的实验性工具
  • 它生成的 Go 代码在语义上与 C 源代码完全相同,一切都是 uintptr ,因此完全不安全
  • 不支持向量化指令或任何内联汇编。这使得它运行速度慢了很多(没有基准测试很难说慢了多少,但肯定很慢)

对于感兴趣的人,go-libwebp 还允许调用动态库(如果可用)。但是,这使用 purego 进行调用,而不需要 cgo。purego 也是一项实验性工具。

相关问题