我目前正在从画布上获取像这样的base64图像数据URL(不是dataURL我只是为了显示字符串的样子)
data:image/png;base64,iVkhdfjdAjdfirtn=
我需要解码该图像以检查图像的宽度和高度
dataurl := strings.Replace(req.PostFormValue("dataurl"), "data:image/png;base64,", "", 1) reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(dataurl)) c, _, err := image.DecodeConfig(reader) if err != nil { log.Fatal(err) } log.Println(c.Width)
但是我在尝试解码配置时收到错误
Unknown image format
因此,是的,我制作dataurl的方式一定是错误的,但无法弄清楚该怎么做。我也尝试传递完整的dataurl(with data:image …)仍然没有成功
您所拥有的是数据URI方案,有关如何对其进行解码的信息以及更多有关此问题的信息,请参见此问答:**
但是请注意,image.Decodeconfig()这只会解码在调用此函数之前注册的图像格式,因此您需要预先注册图像格式处理程序。这可以通过类似的导入来完成
image.Decodeconfig()
import _ "image/png"
有关更多信息,请参见的doc文件image。或者,如果您知道确切的格式(例如,在示例中为PNG),则可以直接使用png.DecodeConfig()。
image
png.DecodeConfig()
因此它对您不起作用,因为您的实际编码图像为PNG格式,但是您没有注册PNG格式处理程序,因此image.DecodeConfig()不会使用PNG处理程序(因此它将无法对其进行解码=
image.DecodeConfig()
"Unknown image format")。
"Unknown image format"
还要注意,替换不属于Base64编码映像的前缀是解决该问题的较差解决方案。而是简单地对输入字符串进行切片:
input := "data:image/png;base64,iVkhdfjdAjdfirtn=" b64data := input[strings.IndexByte(input, ',')+1:]
切片字符串甚至不会在内存中复制该字符串,它只会创建一个新的(两个单词)字符串标题。