为了账号安全,请及时绑定邮箱和手机立即绑定

转到 base64 图像解码

转到 base64 图像解码

Go
慕后森 2021-11-15 20:59:53
我目前正在从类似这样的画布中获取 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...) 仍然没有成功
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

您拥有的是数据 URI 方案,有关如何对其进行解码的信息以及有关此问题的更多信息,请参见此问答:

使用 base64.StdEncoding.DecodeString(str) 时输入字节 4 处的 base64 数据非法

但请注意,image.Decodeconfig()只会对调用此函数之前注册的图像格式进行解码,因此您需要提前注册图像格式处理程序。这可以通过导入来完成

import _ "image/png"

更多关于这方面的信息在image. 或者,如果您知道确切的格式(例如,在您的示例中是 PNG),则可以直接使用png.DecodeConfig().

因此它对您不起作用,因为您的实际编码图像是 PNG 格式,但您没有注册 PNG 格式处理程序,因此image.DecodeConfig()不会使用 PNG 处理程序(因此它将无法对其进行解码 = > "Unknown image format")。

另请注意,替换不属于 Base64 编码图像的前缀是摆脱它的糟糕解决方案。而是简单地对输入字符串进行切片:

input := "data:image/png;base64,iVkhdfjdAjdfirtn="
b64data := input[strings.IndexByte(input, ',')+1:]

切片字符串甚至不会复制内存中的字符串,它只会创建一个新的(两个字)字符串标题。


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信