去解码图像不支持的类型错误



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

infile, err := os.Open(filename)
image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
src, _, err := image.Decode(infile)

image.Decode函数产生错误unsupported type *image.RGBA。有人对这个错误有任何见解吗?

我也用带有相应注册的 JPEG 尝试过这个:

image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
src, _, err := image.Decode(infile)

这导致unsupported type *image.YCbCr.非常令人困惑,因为图像本身是RGB。

编辑:还尝试只导入image/jpegimage/png,而不使用image.RegisterFormat,但仍然得到相同的错误。

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

首先是错误:

注册格式时出错。

巴布亚新几内亚的魔力不是"png"而是"x89PNGrnx1an"。所以注册是:

image.RegisterFormat("png", "x89PNGrnx1an", png.Decode, png.DecodeConfig)

JPEG的魔力不是"jpeg"而是"xffxd8"。JPEG 注册:

image.RegisterFormat("jpeg", "xffxd8", jpeg.Decode, jpeg.DecodeConfig)

但不要这样做!

只需导入image/pngimage/jpeg包,包初始化函数会自动为您执行此操作。如果您不使用软件包,则可以使用空白标识符(并且您仅为初始化"副作用"执行此操作(:

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

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

> @icza的好答案。让它变得简单,只需导入包"image/jpeg"和"image/png"(如果我们必须同时使用这两种图像格式。否则,仅导入您将使用"image/jpeg"或"image/png"的特定包(。它对我有用。

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

相关内容

最新更新