JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示

base64編碼的圖片數據在前端解析顯示共4步:1.使用atob()解碼base64字符串為二進制字符串,注意用trycatch處理異常;2.將二進制字符串轉換為arraybuffer再轉為uint8array以便訪問字節;3.利用arraybuffer創建blob對象并指定mime類型,如image/jpeg;4.通過url.createobjecturl生成臨時url賦值給img標簽src屬性完成顯示。同時可從base64頭部提取mime類型,或手動指定。arraybuffer和uint8array提供高效方式處理二進制數據,避免重復解碼可提升性能,大文件建議用web workers解碼。

JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示

Base64編碼的圖片數據,在前端JS中解析并顯示,其實沒那么神秘。核心就是將Base64字符串解碼成二進制數據,然后利用這些數據創建一個URL,最后把這個URL設置給JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示標簽的src屬性。

JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示

4步完成Base64數據轉圖片顯示

JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示

  1. 解碼Base64字符串: 使用atob()函數將Base64字符串解碼成二進制字符串。這個函數是JavaScript內置的,非常方便。

    JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示

    function base64ToBinary(base64String) {   return atob(base64String); }

    需要注意的是,atob()函數可能會拋出異常,比如當Base64字符串格式不正確時。所以,最好用try…catch包裹一下。

  2. 創建ArrayBuffer和Uint8Array: 將二進制字符串轉換為ArrayBuffer,然后再轉換為Uint8Array。ArrayBuffer代表原始的二進制數據緩沖區,Uint8Array則提供了對這些數據的更方便的訪問方式。

    function binaryToArrayBuffer(binary) {   const length = binary.length;   const buffer = new ArrayBuffer(length);   const view = new Uint8Array(buffer);   for (let i = 0; i < length; i++) {     view[i] = binary.charCodeAt(i);   }   return buffer; }

    這里,我們遍歷二進制字符串,將每個字符的Unicode編碼轉換為Uint8Array中的一個字節。

  3. 創建Blob對象: 使用ArrayBuffer創建一個Blob對象。Blob對象代表一個不可變的、原始數據的類文件對象。我們需要指定Blob的MIME類型,這通常包含在Base64字符串的頭部信息中。

    function arrayBufferToBlob(buffer, mimeType) {   return new Blob([buffer], { type: mimeType }); }

    MIME類型很重要,它告訴瀏覽器如何處理這些數據。常見的圖片MIME類型有image/jpeg、image/png等。

  4. 創建URL并顯示圖片: 使用URL.createObjectURL()方法為Blob對象創建一個URL,然后將這個URL賦值給JS怎樣解析Base64圖片 4步完成Base64數據轉圖片顯示標簽的src屬性。

    function displayImage(blob) {   const imageUrl = URL.createObjectURL(blob);   const img = document.createElement('img');   img.src = imageUrl;   document.body.appendChild(img); // 或者添加到你想要的元素中 }

    URL.createObjectURL()創建的URL是臨時的,它只在當前文檔有效。當頁面卸載或者你不再需要這個URL時,應該調用URL.revokeObjectURL()來釋放資源。

如何從Base64字符串中提取MIME類型?

Base64字符串通常以data:[mime type];base64,開頭。我們可以使用正則表達式來提取MIME類型。

function getMimeTypeFromBase64(base64String) {   const match = base64String.match(/^data:(.*?);base64,/);   if (match && match[1]) {     return match[1];   }   return null; }

提取到MIME類型后,就可以將其傳遞給arrayBufferToBlob函數了。如果Base64字符串沒有包含MIME類型信息,你可能需要根據實際情況手動指定。

為什么需要ArrayBuffer和Uint8Array?

直接操作二進制數據是很麻煩的,ArrayBuffer和Uint8Array提供了一種更方便、更高效的方式來處理二進制數據。ArrayBuffer代表一塊連續的內存區域,而Uint8Array則允許我們以字節為單位訪問這塊內存。這對于處理圖像、音頻等二進制數據非常有用。沒有它們,你可能需要使用更底層、更復雜的API來操作二進制數據。

性能優化:避免重復解碼Base64字符串

如果需要多次使用同一個Base64字符串,避免重復解碼。解碼操作是比較耗時的,可以把解碼后的ArrayBuffer或者Blob對象緩存起來,下次直接使用。另外,如果Base64字符串非常大,考慮使用Web Workers在后臺線程中進行解碼,避免阻塞主線程

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享