0


【前端技巧】图片格式转换(File、Blob、base64)

@Author:Outman
@Date:2022-11-17

图片格式转换(File、Blob、base64)

一、类型简介

BLOB(binary large object): 二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。

属性名称读/写描述size只读Blob 对象中所包含数据的大小(字节)。type只读一个字符串,表明该Blob对象所包含数据的MIME类型。如果类型未知,则该值为空字符串。例如 “image/png”.

File: File 对象通常是用户在网页中的一个<input> 元素上传文件返回的 FileList 对象,或者是拖放操作返回的 DataTransfer 对象,也可以在浏览器中的控制台中自己创建。

属性名称读/写描述name只读返回文件的名称.由于安全原因,返回的值并不包含文件路径 。type只读返回 File 对象所表示文件的媒体类型(MIME)。例如 PNG 图像是 “image/png”.lastModified只读number, 返回所引用文件最后修改日期,自 1970年1月1日0:00 以来的毫秒数。lastModifiedDate只读Date, 返回当前文件的最后修改日期,如果无法获取到文件的最后修改日期,则使用当前日期来替代。size只读File 对象中所包含数据的大小(字节)。

base64: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。编码规则:把3个字节变成4个字节;每76个字符加一个换行符;最后的结束符也要处理。

二、类型转换

1. BLOB 与 File

  • BLOB 转 File
const file =newFile([blob], fileName,{type: fileType,lastModified: Date.now()});
  • File 转 BLOB
const blob =URL.createObjectURL(file);

2. BLOB 与 base64

  • BLOB(url) 转 base64
const image =newImage();
image.src = imgBlob;
image.onload=()=>{// 构建canvas节点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);// 转换const imgBase64 = canvas.toDataURL();
  console.log(imgBase64);};
  • base64 转 BLOB
// 分割base64const temp = base64Data.split(',');// 获取类型const mime = arr[0].match(/:(.*?);/)[1];// 解码使用 base-64 编码的字符串const raw = window.atob(temp[1]);const rawLength = raw.length;// base64文件数据读取const uInt8Array =newUint8Array(rawLength);for(let i =0; i < rawLength; i +=1){
  uInt8Array[i]= raw.charCodeAt(i);}const blob =newBlob([uInt8Array],{type: mime });

3. File 与 base64

  • File 转 base64
const reader =newFileReader();
reader.readAsDataURL(file);
reader.onload=function(e){// e.target.result 即为base64结果
  console.log(e.target.result);};
  • base64 转 File
// 分割base64const arr = base64Data.split(',');// 获取类型const mime = arr[0].match(/:(.*?);/)[1];// 解析base字符串const bstr =atob(arr[1]);const n = bstr.length;// base64文件数据读取const u8arr =newUint8Array(n);while(n--){
  u8arr[n]= bstr.charCodeAt(n);}const file =newFile([u8arr], filename,{type: mime });

本文转载自: https://blog.csdn.net/weixin_42919342/article/details/127901905
版权归原作者 前端Outman 所有, 如有侵权,请联系我们删除。

“【前端技巧】图片格式转换(File、Blob、base64)”的评论:

还没有评论