js前端技巧之圖片格式轉(zhuǎn)換(File、Blob、base64)
一、類型簡(jiǎn)介
BLOB(binary large object): 二進(jìn)制大對(duì)象,是一個(gè)可以存儲(chǔ)二進(jìn)制文件的容器。 在計(jì)算機(jī)中,BLOB常常是數(shù)據(jù)庫(kù)中用來存儲(chǔ)二進(jìn)制文件的字段類型。
屬性名稱 | 讀/寫 | 描述 |
---|---|---|
size | 只讀 | Blob 對(duì)象中所包含數(shù)據(jù)的大?。ㄗ止?jié))。 |
type | 只讀 | 一個(gè)字符串,表明該Blob對(duì)象所包含數(shù)據(jù)的MIME類型。如果類型未知,則該值為空字符串。例如 “image/png”. |
File: File 對(duì)象通常是用戶在網(wǎng)頁(yè)中的一個(gè)<input> 元素上傳文件返回的 FileList 對(duì)象,或者是拖放操作返回的 DataTransfer 對(duì)象,也可以在瀏覽器中的控制臺(tái)中自己創(chuàng)建。
屬性名稱 | 讀/寫 | 描述 |
---|---|---|
name | 只讀 | 返回文件的名稱.由于安全原因,返回的值并不包含文件路徑 。 |
type | 只讀 | 返回 File 對(duì)象所表示文件的媒體類型(MIME)。例如 PNG 圖像是 “image/png”. |
lastModified | 只讀 | number, 返回所引用文件最后修改日期,自 1970年1月1日0:00 以來的毫秒數(shù)。 |
lastModifiedDate | 只讀 | Date, 返回當(dāng)前文件的最后修改日期,如果無(wú)法獲取到文件的最后修改日期,則使用當(dāng)前日期來替代。 |
size | 只讀 | File 對(duì)象中所包含數(shù)據(jù)的大?。ㄗ止?jié))。 |
base64: Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法。編碼規(guī)則:把3個(gè)字節(jié)變成4個(gè)字節(jié);每76個(gè)字符加一個(gè)換行符;最后的結(jié)束符也要處理。
二、類型轉(zhuǎn)換
1. BLOB 與 File
BLOB 轉(zhuǎn) File
const file = new File([blob], fileName, { type: fileType, lastModified: Date.now() });
File 轉(zhuǎn) BLOB
const blob = URL.createObjectURL(file);
2. BLOB 與 base64
BLOB(url) 轉(zhuǎn) base64
const image = new Image(); image.src = imgBlob; image.onload = () => { // 構(gòu)建canvas節(jié)點(diǎn) const canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; const context = canvas.getContext('2d'); context.drawImage(image, 0, 0, image.width, image.height); // 轉(zhuǎn)換 const imgBase64 = canvas.toDataURL(); console.log(imgBase64); };
base64 轉(zhuǎn) BLOB
// 分割base64 const temp = base64Data.split(','); // 獲取類型 const mime = arr[0].match(/:(.*?);/)[1]; // 解碼使用 base-64 編碼的字符串 const raw = window.atob(temp[1]); const rawLength = raw.length; // base64文件數(shù)據(jù)讀取 const uInt8Array = new Uint8Array(rawLength); for (let i = 0; i < rawLength; i += 1) { uInt8Array[i] = raw.charCodeAt(i); } const blob = new Blob([uInt8Array], { type: mime });
3. File 與 base64
File 轉(zhuǎn) base64
const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { // e.target.result 即為base64結(jié)果 console.log(e.target.result); };
base64 轉(zhuǎn) File
// 分割base64 const arr = base64Data.split(','); // 獲取類型 const mime = arr[0].match(/:(.*?);/)[1]; // 解析base字符串 const bstr = atob(arr[1]); const n = bstr.length; // base64文件數(shù)據(jù)讀取 const u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } const file = new File([u8arr], filename, { type: mime });
總結(jié)
到此這篇關(guān)于js前端技巧之圖片格式轉(zhuǎn)換(File、Blob、base64)的文章就介紹到這了,更多相關(guān)前端圖片格式轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)title標(biāo)題欄文字不間斷滾動(dòng)顯示效果
這篇文章主要介紹了JS實(shí)現(xiàn)title標(biāo)題欄文字不間斷滾動(dòng)顯示效果,通過javascript時(shí)間函數(shù)定時(shí)操作動(dòng)態(tài)修改頁(yè)面元素實(shí)現(xiàn)滾動(dòng)效果,需要的朋友可以參考下2016-09-09微信小程序?qū)崿F(xiàn)事件傳參與數(shù)據(jù)同步流程詳解
這篇文章主要介紹了微信小程序開發(fā)中實(shí)現(xiàn)事件傳參與數(shù)據(jù)同步的詳細(xì)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10簡(jiǎn)潔短小的 JavaScript IE 瀏覽器判定代碼
IE瀏覽器不管是什么版本,總是跟Web標(biāo)準(zhǔn)有些不太兼容。對(duì)于代碼工作者來說,自然是苦不堪言,為了考慮IE的兼容問題,不管是寫 CSS 還是 JS,往往都要對(duì) IE 特別對(duì)待,這就少不了做些判斷。本文不討論如何區(qū)分 IE 的樣式,僅是 JS 判定 IE 瀏覽器。2010-03-03Bootstrap布局組件應(yīng)用實(shí)例講解
這篇文章主要針對(duì)Bootstrap布局組件應(yīng)用進(jìn)行實(shí)例講解,感興趣的小伙伴們可以參考一下2016-02-02CSS+Table圖文混排中實(shí)現(xiàn)文本自適應(yīng)圖片寬度(超簡(jiǎn)單+跨所有瀏覽器)
最近在為學(xué)樂網(wǎng)開發(fā)圖片顯示功能時(shí)遇到一個(gè)問題:在一個(gè)table中有兩行,上邊顯示圖片(大小隨機(jī)),下邊顯示對(duì)圖片的相關(guān)說明(文字長(zhǎng)度隨機(jī))2009-02-02