国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JS各種數(shù)據(jù)流之間的格式(ArrayBuffer、Uint8Array、Blob、 File、DataURL)相互轉(zhuǎn)換及應(yīng)用

這篇具有很好參考價值的文章主要介紹了JS各種數(shù)據(jù)流之間的格式(ArrayBuffer、Uint8Array、Blob、 File、DataURL)相互轉(zhuǎn)換及應(yīng)用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

JS各種數(shù)據(jù)流之間的格式(ArrayBuffer、Uint8Array、Blob、 File、DataURL)相互轉(zhuǎn)換及應(yīng)用

前端網(wǎng)頁?File?上傳、下載,Canvas?保存圖片,Ajax?和?Fetch?二進(jìn)制流傳輸,PDF?預(yù)覽,瀏覽器上?WebAssembly?的應(yīng)用?等等都需要到?ArrayBuffer?和?Blob?。

API介紹

  • FileReader 對象允許Web應(yīng)用程序異步讀取存儲在用戶計算機(jī)上的文件(或原始數(shù)據(jù)緩沖區(qū))的內(nèi)容,使用 File 或 Blob 對象指定要讀取的文件或數(shù)據(jù)。
  • Blob 對象表示一個不可變、原始數(shù)據(jù)的類文件對象。它的數(shù)據(jù)可以按文本或二進(jìn)制的格式進(jìn)行讀取,也可以轉(zhuǎn)換成 ReadableStream 來用于數(shù)據(jù)操作。Blob 表示的不一定是 JavaScript 原生格式的數(shù)據(jù)。File 接口基于 Blob,繼承了 blob 的功能并將其擴(kuò)展使其支持用戶系統(tǒng)上的文件。
屬性名稱 讀/寫 描述
size 只讀 Blob 對象中所包含數(shù)據(jù)的大小(字節(jié))。
type 只讀 一個字符串,表明該Blob對象所包含數(shù)據(jù)的MIME類型。如果類型未知,則該值為空字符串。例如 “image/png”.
  • ArrayBuffer 對象代表儲存二進(jìn)制數(shù)據(jù)的一段內(nèi)存,它不能直接讀寫,只能通過視圖(TypedArray 視圖和 DataView 視圖)來讀寫,視圖的作用是以指定格式解讀二進(jìn)制數(shù)據(jù)。
  • Uint8Array 對象是 ArrayBuffer 的一個數(shù)據(jù)類型(8 位不帶符號整數(shù))。
  • TextEncoder 接受代碼點流作為輸入,并提供 UTF-8 字節(jié)流作為輸出。
  • TextDecoder 接口表示一個文本解碼器,一個解碼器只支持一種特定文本編碼,例如 utf-8、iso-8859-2、koi8、cp1261,gbk 等等。解碼器將字節(jié)流作為輸入,并提供代碼點流作為輸出。
  • base64?Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進(jìn)制數(shù)據(jù)的方法。編碼規(guī)則:把3個字節(jié)變成4個字節(jié);每76個字符加一個換行符;最后的結(jié)束符也要處理。

注意: 二進(jìn)制數(shù)組并不是真正的
js各種數(shù)據(jù)流之間的格式轉(zhuǎn)換數(shù)組,而是類似數(shù)組的對象。

字符與ArrayBuffer,Uint8Array相互轉(zhuǎn)換

1、TextEncoder => ArrayBuffer

let encoder = new TextEncoder();

// 字符 轉(zhuǎn) Uint8Array
let uint8Array = encoder.encode("你好啊");

// Uint8Array 轉(zhuǎn) ArrayBuffer
let arrayBuffer = uint8Array.buffer

2、Blob?=>?ArrayBuffer

let str = 'hello,你好嗎?'
let blob = new Blob([str],{type:'text/plain;charset=utf-8'});
let utf8decoder = new TextDecoder()
blob.arrayBuffer().then(buffer=>{
  // ArrayBuffer
  console.log(buffer)
  let text = utf8decoder.decode(buffer)
  // String
  console.log(text)
})

3.FileReader?=>?ArrayBuffer

let str = 'hello,你好嗎?'
let blob = new Blob([str],{type:'text/plain;charset=utf-8'});
let utf8decoder = new TextDecoder()
let fr = new FileReader()
fr.readAsArrayBuffer(blob)
fr.onload = function(res) {
  // ArrayBuffer
  let buffer = fr.result
  console.log(buffer)
  let text = utf8decoder.decode(buffer)
  // String
  console.log(text)
}

轉(zhuǎn)換及應(yīng)用

uint8array轉(zhuǎn)arraybuffer,javaScript,javascript,開發(fā)語言,vue.js,前端

1.將file轉(zhuǎn)換成DataURL,實現(xiàn)本地圖片上傳預(yù)覽

 <input type="file" id="file"> 
 <img id="img">
  • 利用URL.createObjectURL()
let img = document.getElementById('img')
 let file = document.getElementById('file')
 file.onchange = function () {
   let imgFile = this.files[0]
   img.src = URL.createObjectURL(imgFile)
   img.onload = function () {
     URL.revokeObjectURL(this.src)
   }
 }
  • 利用FileReader.readAsDataURL()
let img = document.getElementById('img')
let file = document.getElementById('file')
file.onchange = function (e) {
  let imgFile = this.files[0]
  let fileReader = new FileReader()
  fileReader.readAsDataURL(imgFile)
  fileReader.onload = function () {
    img.src = this.result
  }
}

2、將DataURL轉(zhuǎn)成file

function dataURLToFile (dataUrl, fileName) {
  const dataArr = dataUrl.split(',')
  const mime = dataArr[0].match(/:(.*);/)[1]
  const originStr = atob(dataArr[1])
  return new File([originStr], fileName, { type: mime })
}
dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==', '測試文件')

// File {name: '測試文件', lastModified: 1640784525620, lastModifiedDate: Wed Dec 29 2021 21:28:45 GMT+0800 (中國標(biāo)準(zhǔn)時間), webkitRelativePath: '', size: 7, …}

3.將canvas轉(zhuǎn)成DataURL,實現(xiàn)將canvans變成圖片,或生成指定格式的圖片,實現(xiàn)圖片格式的轉(zhuǎn)換

// html
 <input type="file" accept="image/*" id="file">

// js
document.querySelector('#file').onchange = function () {
  canvasToDataURL(this.files[0])
    .then(res => console.log(res))
}
function canvasToDataURL (file) {
  return new Promise(resolve => {
    const img = document.createElement('img')
    img.src = URL.createObjectURL(file)
    img.onload = function () {
      const canvas = document.createElement('canvas')
      canvas.width = img.width
      canvas.height = img.height
      const ctx = canvas.getContext('2d')
      ctx.drawImage(img, 0, 0)
      resolve(canvas.toDataURL('image/png', 1))
    }
  })
}

這個方法返回的是圖片base64,用來生成圖片的,默認(rèn)png格式,也可以通過傳遞參數(shù)改變圖片格式,還能改變圖片保存的質(zhì)量。

如:canvas.toDataURL(“images/jpeg”,0) ,第一個參數(shù)就是把圖片編碼為jpeg格式,第二個參數(shù)(0-1)就是指定圖片質(zhì)量,數(shù)值越大質(zhì)量越高,不過對于image/png格式?jīng)]法設(shè)置圖片質(zhì)量。

另外,chrome還支持自家的image/webp格式圖片,也能設(shè)置圖片質(zhì)量, 實現(xiàn)圖片壓縮

4.將DataURL轉(zhuǎn)成canvas

function dataUrlToCanvas (dataUrl) {
  return new Promise(resolve => {
    const img = new Image()
    img.src = dataUrl
    img.onload = function () {
      const canvas = document.createElement('canvas')
      canvas.width = this.width
      canvas.height = this.height
      const ctx = canvas.getContext('2d')
      ctx.drawImage(this, 0, 0)
      resolve(canvas)
    }
  })
}
const dataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUh...'
dataUrlToCanvas(dataUrl)
  .then(res => document.body.appendChild(res)

5.將canvas轉(zhuǎn)成file

1.將canvas轉(zhuǎn)成blob

利用canvas.toBlob()

// html
 <input type="file" accept="image/*" id="file">

// js
document.querySelector('#file').onchange = function () {
  canvasToDataURL(this.files[0])
    .then(res => console.log(res))
}
function canvasToDataURL (file) {
  return new Promise(resolve => {
    const img = document.createElement('img')
    img.src = URL.createObjectURL(file)
    img.onload = function () {
      const canvas = document.createElement('canvas')
      canvas.width = img.width
      canvas.height = img.height
      const ctx = canvas.getContext('2d')
      ctx.drawImage(img, 0, 0)
      canvas.toBlob(function (e) {
        resolve(e)
      }, 'image/png', 1)
    }
  })
}

2.將blob轉(zhuǎn)成file
利用new File();

 function blobToFile(blob, filename, type) {
    return new File([blob], filename, { type })
 }
 
 blobToFile('test info', 'test', 'text/plain' )

?文章來源地址http://www.zghlxwxcb.cn/news/detail-712410.html

到了這里,關(guān)于JS各種數(shù)據(jù)流之間的格式(ArrayBuffer、Uint8Array、Blob、 File、DataURL)相互轉(zhuǎn)換及應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Elasticsearch:將 ILM 管理的數(shù)據(jù)流遷移到數(shù)據(jù)流生命周期

    Elasticsearch:將 ILM 管理的數(shù)據(jù)流遷移到數(shù)據(jù)流生命周期

    警告 :此功能處于技術(shù)預(yù)覽階段,可能會在未來版本中更改或刪除。 Elastic 將努力解決任何問題,但技術(shù)預(yù)覽版中的功能不受官方 GA 功能的支持 SLA 的約束。目前的最新版本為 8.12。 在本教程中,我們將了解如何將現(xiàn)有數(shù)據(jù)流(data stream)從索引生命周期管理 (ILM) 遷移到數(shù)據(jù)

    2024年04月29日
    瀏覽(28)
  • 數(shù)據(jù)流圖(DFD)

    數(shù)據(jù)流圖(DFD)

    數(shù)據(jù)流圖是用于表示系統(tǒng)邏輯模型的一種工具。從數(shù)據(jù) 傳遞和加工 的角度,以圖形的方式描述數(shù)據(jù)在系統(tǒng)中流動和處理的過程 數(shù)據(jù)字典是指對數(shù)據(jù)的數(shù)據(jù)項、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲、處理邏輯等進(jìn)行定義和描述,其目的是 對數(shù)據(jù)流圖中的各個元素做出詳細(xì)的說明 ,

    2024年02月04日
    瀏覽(28)
  • Flink數(shù)據(jù)流

    Flink數(shù)據(jù)流

    官網(wǎng)介紹 Apache Flink 是一個框架和分布式處理引擎,用于對無界和有界數(shù)據(jù)流進(jìn)行有狀態(tài)計算。Flink 被設(shè)計為在所有常見的集群環(huán)境中運行,以內(nèi)存中的速度和任何規(guī)模執(zhí)行計算。 1.無限流有一個開始,但沒有定義的結(jié)束。它們不會在生成數(shù)據(jù)時終止并提供數(shù)據(jù)。必須連續(xù)處

    2024年02月17日
    瀏覽(20)
  • postman 數(shù)據(jù)流請求

    postman 數(shù)據(jù)流請求

    備注: Postman version : Version 9.21.3 Windows 版本 1.修改headers 2.Body 部分 選擇raw 格式數(shù)據(jù) 3.最后執(zhí)行請求

    2024年02月11日
    瀏覽(33)
  • nginx 轉(zhuǎn)發(fā)數(shù)據(jù)流文件

    nginx 轉(zhuǎn)發(fā)數(shù)據(jù)流文件

    1.問題描述 后端服務(wù),從數(shù)據(jù)庫中查詢?nèi)罩?,并生成表格文件返回靜態(tài)文件。當(dāng)數(shù)據(jù)量幾兆時,返回正常,但是超過幾十兆,幾百兆,就會超過網(wǎng)關(guān)的連接超時時間30秒。 時序圖 ?這里面主要花費時間的地方在: 1后臺服務(wù)器,將數(shù)據(jù)格式化,寫到本地的文件的過程 2后臺服務(wù)

    2024年02月06日
    瀏覽(28)
  • 指令流和數(shù)據(jù)流

    指令流和數(shù)據(jù)流 Flynn于1972年提出計算平臺分類法主要根據(jù)指令流和數(shù)據(jù)流來分類,分為四類: ①單指令流單數(shù)據(jù)流機(jī)器(S1SD) SISD機(jī)器是一種傳統(tǒng)的串行計算機(jī),它的硬件不支持任何形式的并行計算,所有的指令都是串行執(zhí)行。并且在某個時鐘周期內(nèi),CPU只能處理一個數(shù)據(jù)流

    2024年02月04日
    瀏覽(30)
  • Java文件讀寫數(shù)據(jù)流

    以下這幾個類都是抽象類.并且都有對于文件操作的具體實現(xiàn)類.File+類名就是具體的實現(xiàn)類 1.1.1.InputStream 以二進(jìn)制方式讀.有兩個主要方法. 1.read(); 該方法有三個版本 無參: read() 讀取一個字節(jié)的數(shù)據(jù),返回 -1 表示讀取結(jié)束 一個參數(shù): read(byte[] b) 最多讀取 b.length 字節(jié)的數(shù)據(jù)到 b

    2024年02月16日
    瀏覽(27)
  • C# 數(shù)據(jù)流 FileStream

    ?

    2024年03月24日
    瀏覽(26)
  • 數(shù)據(jù)流重定向(>,>>)(<,<<)(2>,2>>)

    數(shù)據(jù)流重定向(>,>>)(<,<<)(2>,2>>)

    數(shù)據(jù)流重定向由字面意思來看,好像就是將【數(shù)據(jù)給他定向到其他地方去】的樣子?沒錯數(shù)據(jù)流重定向就是將某個命令執(zhí)行后應(yīng)該要出現(xiàn)在屏幕上的數(shù)據(jù),給他傳輸?shù)狡渌胤健?什么是數(shù)據(jù)流重定向呢?這得由命令的執(zhí)行說起,一般來說,如果你要執(zhí)行一個命令,通常它會是

    2023年04月26日
    瀏覽(71)
  • 實時數(shù)據(jù)處理:數(shù)據(jù)流的安全與隱私

    實時數(shù)據(jù)處理在現(xiàn)代大數(shù)據(jù)環(huán)境中具有重要意義。隨著互聯(lián)網(wǎng)的普及和人們對數(shù)據(jù)的需求不斷增加,實時數(shù)據(jù)處理技術(shù)已經(jīng)成為了企業(yè)和組織的核心技術(shù)之一。然而,隨著數(shù)據(jù)處理技術(shù)的不斷發(fā)展,數(shù)據(jù)流的安全與隱私也成為了一個重要的問題。在這篇文章中,我們將深入探

    2024年02月20日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包