大家好,我们又见面了啊~本文《image.Decode 在 golang 嵌入上失败》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~
问题内容该程序的目的是解码嵌入有“embed”的img。
图像 (bu.png
) 位于 main.go 的同一目录中。
- 嵌入方式似乎无法设置完全相同的资源
package main
import (
"bytes"
_ "embed"
"image"
)
var (
//go:embed bu.png
img []byte
)
func main() {
a := bytes.NewBuffer(img)
a, b, e := image.Decode()
println(e.Error())
// image: unknown format
println(b)
//
println(a)
// (0x0,0x0)
// println(string(img))
// the text of the image seem a little different between nano
}
图像数据应位于 img 变量中,导致“嵌入”导入
正确答案
这不是 embed
的事情。 You have to import the individual libraries you want to support. 它们的初始化将注册其格式以供 image.decode
使用。引用上述链接,
解码任何特定的图像格式都需要事先注册解码器函数。
尝试添加导入,例如,
_ "image/png"
我使用以下内容对此进行了测试,这应该让您相信 embed
是无关紧要的:
package main
import (
_ "embed"
"fmt"
"bytes"
"image"
//_ "image/png"
//_ "image/jpeg"
//_ "image/gif"
"os"
)
var (
//go:embed bu.png
img []byte
)
func main() {
f, err := os.Open("bu.png")
if err != nil {
panic(fmt.Errorf("Couldn't open file: %w", err))
}
defer f.Close()
fmt.Println(image.Decode(f))
buf := bytes.NewBuffer(img)
fmt.Println(image.Decode(buf))
}
理论要掌握,实操不能落!以上关于《image.Decode 在 golang 嵌入上失败》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!