为了账号安全,请及时绑定邮箱和手机立即绑定

image.Decode 在 golang 嵌入上失败

image.Decode 在 golang 嵌入上失败

Go
一只萌萌小番薯 2022-10-10 18:11:49
该程序的目的是解码嵌入“embed”的img。图像 ( bu.png) 位于main.go的同一目录中。嵌入方式似乎无法设置完全相同的资源package mainimport (    "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 变量中导致“嵌入”导入
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

这不是embed一回事。 您必须导入要支持的各个库。 它们的初始化将注册它们的格式以供 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))


}


查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信