image.Decode golang 嵌入失败
image.Decode fail on golang embed
这个程序的目的是解码一个用“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
使用。引用前面的链接,
Decoding any particular image format requires the prior registration of a decoder function.
尝试添加导入,例如,
_ "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))
}
这个程序的目的是解码一个用“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
使用。引用前面的链接,
Decoding any particular image format requires the prior registration of a decoder function.
尝试添加导入,例如,
_ "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))
}