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

时间:2017-07-14 13:50:23

标签: go

我正在尝试使用内置的“image”包打开一个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:道歉,我得到的错误甚至不是来自解码功能。图像正确解码。

2 个答案:

答案 0 :(得分: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("jpeg", "\xff\xd8", jpeg.Decode, jpeg.DecodeConfig)

但不要这样做!

只需导入image/pngimage/jpeg包,包init函数会自动为您执行此操作。如果你不使用这些包,你可以使用blank标识符(你只需要进行初始化"副作用"):

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

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

答案 1 :(得分:0)

@icza的很好答案。 简单一点:只需导入“ image / jpeg”和“ image / png”包(如果我们必须同时使用两种图像格式,否则仅导入特定的包,则可以使用“ image / jpeg”或“ “图像/ png”)。它对我有用。

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