(1) Data URLs,即前缀为 data: 协议的 URL,其允许内容创建者向文档中嵌入小文件。
(2) Data URLs 由四个部分组成:前缀(data:)、指示数据类型的 MIME 类型、如果非文本则为可选的 base64 标记、数据本身:data:[][;base64],
4. canvas
(1) Canvas API 提供了一个通过 Javascript 和 HTML 的
二、相互转化
1. File、Blob 转化成 dataURL
FileReader 对象允许 Web 应用程序异步读取文件(或原始数据缓冲区)内容,使用 File 或 Blob 对象指定要读取的文件或数据。
function fileToDataURL(file) { let reader = new FileReader() reader.readAsDataURL(file) // reader 读取文件成功的回调 reader.Onload= function (e) { return reader.result } }
2. dataURL(base64) 转化成 Blob(二进制)、File 对象
// dataURL 转为 Blob function dataURLToBlob(fileDataURL) { let arr = fileDataURL.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new Blob([u8arr], { type: mime }) } // dataURL 转为 File function dataURLToBlob(fileDataURL, filename) { let arr = fileDataURL.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new File([u8arr], filename, { type: mime }) }
3. File, Blob 文件数据绘制到 canvas
// 思路:File, Blob ——> dataURL ——> canvas function fileAndBlobToCanvas(fileDataURL) { let img = new Image() img.src = fileDataURL let canvas = document.createElement('canvas') if (!canvas.getContext) { alert('浏览器不支持canvas') return } let ctx = canvas.getContext('2d') document.getElementById('container').appendChild(canvas) img.Onload= function () { ctx.drawImage(img, 0, 0, canvas.width, canvas.height) } }
4. 从 canvas 中获取文件 dataURL
function canvasToDataURL() { let canvas = document.createElement('canvas') let canvasDataURL = canvas.toDataURL('image/png', 1.0) return canvasDataURL }