我正在尝试使用内置的“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/jpeg
和image/png
,但没有使用image.RegisterFormat
,但仍然遇到相同的错误。
编辑#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/png
和image/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"
.
.
....
)