2017-07-14 153 views
1

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

+0

你是如何生成这些图像的? –

+0

你使用什么版本? –

+0

去版本:1.8.3和图像来自各种数据集,我也试着用谷歌google.com的标志 –

回答

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图像。

+0

这个答案很奇怪,因为他的代码为我开箱即用,但很高兴知道你可以导入包。 –

+0

@BenjaminKadish因为为了使'png.Decode'和'png.DecodeConfig'有效,你已经导入了'image/png',并且它的init()函数已经被执行了。 – icza

+0

那为什么这不适合他? –

相关问题