我正在尝试使用内置的"图像"包打开 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:抱歉,我得到的错误甚至不是来自解码功能。图像正确解码。
首先是错误:
注册格式时出错。
巴布亚新几内亚的魔力不是"png"
而是"x89PNGrnx1an"
。所以注册是:
image.RegisterFormat("png", "x89PNGrnx1an", png.Decode, png.DecodeConfig)
JPEG的魔力不是"jpeg"
而是"xffxd8"
。JPEG 注册:
image.RegisterFormat("jpeg", "xffxd8", jpeg.Decode, jpeg.DecodeConfig)
但不要这样做!
只需导入image/png
并image/jpeg
包,包初始化函数会自动为您执行此操作。如果您不使用软件包,则可以使用空白标识符(并且您仅为初始化"副作用"执行此操作(:
import (
_ "image/png"
_ "image/jpeg"
)
完成上述导入后,您将能够解码PNG和JPEG图像。
> @icza的好答案。让它变得简单,只需导入包"image/jpeg"和"image/png"(如果我们必须同时使用这两种图像格式。否则,仅导入您将使用"image/jpeg"或"image/png"的特定包(。它对我有用。
import (
...
.
.
_ "image/jpeg"
_ "image/png"
.
.
....
)