Go 转到解码图像不支持的类型错误

Go 转到解码图像不支持的类型错误,go,Go,我正在尝试使用内置的“图像”包打开png图像,如下所示: infile, err := os.Open(filename) image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig) src, _, err := image.Decode(infile) image.Decode函数正在产生不支持的类型*image.RGBA错误。有人知道这个错误吗 我还尝试了使用JPEG和相应的注册: image.RegisterForma

我正在尝试使用内置的“图像”包打开png图像,如下所示:

infile, err := os.Open(filename)
image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
src, _, err := image.Decode(infile)
image.Decode
函数正在产生
不支持的类型*image.RGBA
错误。有人知道这个错误吗

我还尝试了使用JPEG和相应的注册:

image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
src, _, err := image.Decode(infile)
image.RegisterFormat("jpeg", "\xff\xd8", jpeg.Decode, jpeg.DecodeConfig)
这将导致
不支持的type*image.YCbCr
。非常混乱,因为图像本身是RGB格式的

编辑:还尝试只导入
image/jpeg
image/png
,而不使用
image.RegisterFormat
,但仍会收到相同的错误


编辑#2:抱歉,我收到的错误甚至不是来自解码功能。图像解码正确。

首先是错误:

注册格式时出错

PNG的魔力不是
“PNG”
,而是
“\x89PNG\r\n\x1a\n”
。因此,注册是:

image.RegisterFormat("png", "\x89PNG\r\n\x1a\n", png.Decode, png.DecodeConfig)
JPEG的魔力不是
“JPEG”
,而是
“\xff\xd8”
。JPEG注册:

image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
src, _, err := image.Decode(infile)
image.RegisterFormat("jpeg", "\xff\xd8", jpeg.Decode, jpeg.DecodeConfig)
但不要这样做

只需导入和包,包初始化函数就会自动为您执行此操作。如果不使用软件包,您可以使用标识符(您这样做只是为了初始化“副作用”):


完成上述导入后,您将能够解码PNG和JPEG图像。

伟大的回答@icza简单化只需导入包“image/jpeg”和“image/png”(如果我们必须同时使用这两种图像格式。否则只导入特定的包,您将使用“image/jpeg”或“image/png”)。它对我有用

import (
    ...
    .
    . 
    _ "image/jpeg"
    _ "image/png"
    .
    . 
    ....
)

这个答案很奇怪,因为他的代码对我来说是现成的,但很高兴知道你可以直接导入包。@BenjaminKadish因为为了使
png.Decode
png.DecodeConfig
有效,你已经导入了
image/png
,及其
init()
函数已经执行。@BenjaminKadish问他,可能是
png。Decode
在他的代码中引用了另一个
png
包,或者
png
甚至可能不是包标识符。即使使用导入方法,我仍然会收到相同的错误:(.在两个不同的图像上也尝试了此操作。@ZhaoLang在进行这些导入时,必须删除
图像。RegisterFormat
调用。还要确保尝试解码的图像是有效的图像。如果仍然无法正常工作,请提供完整的代码和示例图像文件。您是如何生成这些图像的?什么版本go版本:1.8.3,图像来自不同的数据集,我也用google.com上的google徽标试用过