登录
首页 >  Golang >  Go问答

image.Decode 在 golang 嵌入上失败

来源:stackoverflow

时间:2024-03-29 23:18:32 500浏览 收藏

大家好,我们又见面了啊~本文《image.Decode 在 golang 嵌入上失败》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

该程序的目的是解码嵌入有“embed”的img。 图像 (bu.png) 位于 ma​​in.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 嵌入上失败》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>