2015-10-24 70 views
1

即時通訊目前從畫布這樣的事情(不dataurl即時得到只是爲了顯示字符串的樣子)圍棋的base64圖像解碼

data:image/png;base64,iVkhdfjdAjdfirtn= 

我需要的是圖像解碼得到一個base64圖像數據網址檢查寬度和圖像的高度

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(有數據:圖像...)仍然沒有成功

+0

我不認爲你沒有收到有效的base64數據。運行'echo -n「iVkhdfjdAjdfirtn =」| base64 -d> image.png'也表示您的數據無效。 –

+0

這是一個例子,我得到的數據是巨大的把它放在這裏 –

回答

4

你有什麼是Data URI scheme,就如何將其解碼和更多的這是這個問題,答案信息:

Illegal base64 data at input byte 4 when using base64.StdEncoding.DecodeString(str)

但請注意,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:] 

切片串甚至不會字符串拷貝到內存中,它只是創建一個新的(雙字)串標頭。

+0

你可以更新這個答案,可以用於JPG和PNG圖像 – mchampaneri