猿问

image.Decode 在 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 变量中导致“嵌入”导入


一只萌萌小番薯
浏览 185回答 1
1回答

慕容森

这不是embed一回事。 您必须导入要支持的各个库。 它们的初始化将注册它们的格式以供 image.Decode. 引用上述链接,解码任何特定的图像格式需要事先注册解码器功能。尝试添加一个导入,例如,_ "image/png"我用以下方法对此进行了测试,这应该让你相信这embed是无关紧要的:package mainimport (    _ "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))}
随时随地看视频慕课网APP

相关分类

Go
我要回答