2017-02-23 157 views
0

我試圖通過使用畫布從視頻創建圖像,然後將圖像發送到API。JavaScript:將base64解碼爲二進制數據

這是我的代碼(大部分爲簡潔起見省略了)

 var image = new Image(); 
     image.src = canvas.toDataURL("image/png"); 

     var newFile = new File([atob(image.src)], lorem.png, { 
     type: "image/png", 
      lastModified: Date.now() 
     }) 

image.src是一個長的字符串,這似乎是在格式BASE64數據:圖像/ PNG; BASE64

[鏈接到數據] [1]:https://gist.github.com/anonymous/d357e780fa60b2c47490a9f795e34acf

當我嘗試將數據與功能ATOB,我收到以下錯誤解碼成二進制:

Error: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.

我不清楚base64數據的哪一部分沒有正確格式化。

回答

1

你必須削減數據url的頭部。當你把圖像放入image.src中時,它的內容就像data:image/png;base64,BASE64ENCODEDSTUFF。 Obsviously data:image/png;base64,不是base64所以用atob解碼會失敗。

1

這不會起作用,因爲data-uri包含一個頭,然後是Base-64數據 - atob()只能處理Base-64部分。這意味着你需要切斷標題(「data:image/png; base64,」)。

但是,通過Data-URI進行速度較慢,浪費的內存超過所需。直接使用blob - 這是如何:

var img = new Image(); 

canvas.toBlob(function(blob) { 
    var newFile = new File([blob], "lorem.png", {type: "image/png"}); 
    img.src = (URL || webkitURL).createObjectURL(blob); 
    // ... 
}); 
相關問題