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

}