簡體   English   中英

去base64圖像解碼

[英]Go base64 image decode

我目前正在從畫布上獲取像這樣的base64圖像數據網址(不是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方案 ,有關如何對其進行解碼的信息以及更多有關此問題的信息,請參見此問答:

使用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:]

切片字符串甚至都不會在內存中復制該字符串,它只會創建一個新的(兩個單詞)字符串標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM