js前端技巧之圖片格式轉(zhuǎn)換(File、Blob、base64)
一、類型簡介
BLOB(binary large object): 二進(jìn)制大對象,是一個可以存儲二進(jìn)制文件的容器。 在計(jì)算機(jī)中,BLOB常常是數(shù)據(jù)庫中用來存儲二進(jìn)制文件的字段類型。
| 屬性名稱 | 讀/寫 | 描述 |
|---|---|---|
| size | 只讀 | Blob 對象中所包含數(shù)據(jù)的大?。ㄗ止?jié))。 |
| type | 只讀 | 一個字符串,表明該Blob對象所包含數(shù)據(jù)的MIME類型。如果類型未知,則該值為空字符串。例如 “image/png”. |
File: File 對象通常是用戶在網(wǎng)頁中的一個<input> 元素上傳文件返回的 FileList 對象,或者是拖放操作返回的 DataTransfer 對象,也可以在瀏覽器中的控制臺中自己創(chuàng)建。
| 屬性名稱 | 讀/寫 | 描述 |
|---|---|---|
| name | 只讀 | 返回文件的名稱.由于安全原因,返回的值并不包含文件路徑 。 |
| type | 只讀 | 返回 File 對象所表示文件的媒體類型(MIME)。例如 PNG 圖像是 “image/png”. |
| lastModified | 只讀 | number, 返回所引用文件最后修改日期,自 1970年1月1日0:00 以來的毫秒數(shù)。 |
| lastModifiedDate | 只讀 | Date, 返回當(dāng)前文件的最后修改日期,如果無法獲取到文件的最后修改日期,則使用當(dāng)前日期來替代。 |
| size | 只讀 | File 對象中所包含數(shù)據(jù)的大小(字節(jié))。 |
base64: Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進(jìn)制數(shù)據(jù)的方法。編碼規(guī)則:把3個字節(jié)變成4個字節(jié);每76個字符加一個換行符;最后的結(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原生js實(shí)現(xiàn)shift/ctrl/alt按鍵的獲取
小測試shift、ctrl、alt按鍵的獲取,感興趣的朋友可以參考下哈,希望可以幫助到你2013-04-04
layui+ssm實(shí)現(xiàn)數(shù)據(jù)表格雙擊編輯更新數(shù)據(jù)功能
在使用layui加載后端數(shù)據(jù)請求時,對數(shù)據(jù)選項(xiàng)框進(jìn)行雙擊即可實(shí)現(xiàn)數(shù)據(jù)的輸入編輯更改,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
JavaScript ES6中export、import與export default的用法和區(qū)別
這篇文章主要給大家介紹了JavaScript ES6中export、import與export default的用法和區(qū)別,文中介紹的非常詳細(xì),相信對大家學(xué)習(xí)ES6會有一定的幫助,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03
小發(fā)現(xiàn)之淺談location.search與location.hash的問題
下面小編就為大家?guī)硪黄“l(fā)現(xiàn)之淺談location.search與location.hash的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
JavaScript實(shí)現(xiàn)拼圖式滑塊驗(yàn)證功能
滑塊驗(yàn)證碼是在網(wǎng)站、APP等應(yīng)用中常見的一種驗(yàn)證方式,通過按照一定規(guī)則滑動滑塊到指定位置完成驗(yàn)證,才可以進(jìn)行下一步操作,本文給大家分享基于JavaScript實(shí)現(xiàn)拼圖式滑塊驗(yàn)證功能,感興趣的朋友一起看看吧2022-06-06
JavaScript中剩余參數(shù)語法(Rest Parameters)的使用
本文主要介紹了JavaScript中剩余參數(shù)語法(Rest Parameters)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-06-06

