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

这篇具有很好参考价值的文章主要介绍了图片格式转换(File、Blob、base64)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

记录一下比较常见的图片格式(File、Blob、base64)在不同的场景他们之间的相互转换的方法。

一、类型简介

  • Blob

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

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

我们在浏览器中输出的Blob对象:
图片格式转换(File、Blob、base64)

  • File

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

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

我们在浏览器中输出的File:
图片格式转换(File、Blob、base64)
可以看到它的属性有和Blob一样的地方,只是在Blob的基础上做了扩展

  • base64

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

看一个Base64格式的图片了解一下:
图片格式转换(File、Blob、base64)
可以看到,Base64格式的图片以data开头,后面跟着图片类型和图片的基本数据

二、类型转换

1、BLOB 与 File
  • File 转 BLOB
// 获取文件对象
const _file = $("#file")[0].files[0];
fileToBlob(){
	const type = file.type;
	const reader = new FileReader();
	reader.readAsDataURL(file)
	reader.onload = function(e) {
	    const blob = new Blob([e.target.result], {type});
	    console.log("blob:", blob);
	    const file = blobToFile(blob, 'fileName');
         console.log('file', file);
	};
}
  • BLOB 转 File
blobToFile(blob, fileName){
	const file = new File([blob], fileName, {type: blob.type});
    return file;
}
2、Blob 与 base64
  • Blob转 base64
blobToBase64(blob){
	const reader = new FileReader();
	reader.readAsDataURL(blob);
	reader.onload = (e) => {
	  const base64 = e.target.result
	  console.log("base64", base64);
	}
}
  • base64 转 Blob
base64ToBlob(base64) {
	// 分割base64
	let arr = base64.split(',');
	// 获取类型
	let mime = arr[0].match(/:(.*?);/)[1] || type;
	// 去掉url的头,并转化为byte
	let bytes = window.atob(arr[1]);
	let n = new ArrayBuffer(bytes.length);
	let u8arr = new Uint8Array(n);
	while (n--) {
	  u8arr[n] = bytes.charCodeAt(n);
	}
	return new Blob([u8arr], {type: mime});
},
3、File 与 base64
  • File 与 base64
// 获取文件对象
const file = $("#file")[0].files[0];
fileToBase64(file){
	const reader = new FileReader();
	reader.readAsDataURL(file);
	reader.onload = function (e) {
	  // e.target.result 即为base64结果
	  console.log(e.target.result);
	};
}
  • base64 转 File
base64ToFile(base64,filename) {
	// 分割base64
	let arr = base64.split(',');
	// 获取类型
	let mime = arr[0].match(/:(.*?);/)[1] || type;
	// 去掉url的头,并转化为byte
	let bytes = window.atob(arr[1]);
	let n = new ArrayBuffer(bytes.length);
	let u8arr = new Uint8Array(n);
	while (n--) {
	  u8arr[n] = bytes.charCodeAt(n);
	}
	return new File([u8arr],filename,{ type: mime });
},
4、arrayBuffer 与 base64
  • base64转arrayBuffer
base64ToUint8Array(base64String) {
	const padding = '='.repeat((4 - base64String.length % 4) % 4);
	const base64 = (base64String + padding)
	             .replace(/\-/g, '+')
	             .replace(/_/g, '/');
	
	const rawData = window.atob(base64);
	const outputArray = new Uint8Array(rawData.length);
	
	for (let i = 0; i < rawData.length; ++i) {
	     outputArray[i] = rawData.charCodeAt(i);
	}
	return outputArray;
}
  • arrayBuffer转base64
arrayBufferToBase64( buffer ) {
	var binary= '';
	var bytes = new Uint8Array( buffer );
	var len = bytes.byteLength;
	for (var i = 0; i < len; i++) {
	   binary += String.fromCharCode( bytes[ i ] );
	}
	return window.btoa( binary );
	
	// 简写(一行代码)
	return window.btoa(String.fromCharCode(...new Uint8Array(buffer)))
}

三、扩展

  • file转buffer
const buffer = fileReader.readAsArrayBuffer(file)
  • file转binary(二进制格式)
const buffer = fileReader.readAsBinaryString(file)
  • file转file(用于修改file的只读属性name、type、lastModified)
const newFile = new File([file], 'newName.wav', {type: 'audio/wav', lastModified: Date.now()})
  • blob转blobUrl
const blob = '.....'
window.URL = window.URL || window.webkitURL;
const blobURL = window.URL.createObjectURL(blob);
  • base64操作
const arr = base64.split(',')
const type = arr[0].match(/:(.*?);/)[1] // image/jpeg
const size = window.atob(arr[1]).length
base加解密 -- 不支持中文
场景:由于一些网络通讯协议的限制,必须对原数据进行编码后才可发送,后端得到后再解码得到原数据,例如,发送某些含有 ASCII 码表中 031 之间的控制字符的数据。
base转码
const base64 = window.btoa('a')
base解码
const string = window.atob(base64)

参考链接:
ArrayBuffer转base64详解:https://juejin.cn/post/6844904088811880455
JavaScript(ES6) - ArrayBuffer: https://www.jianshu.com/p/5a841d6d7cc3文章来源地址https://www.toymoban.com/news/detail-433429.html

到了这里,关于图片格式转换(File、Blob、base64)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 将html字符串中的base64图片转换成file并上传

    目的 解决富文本编辑器中复制粘贴的图片 base64 字符串过长导致无法存储到数据库的问题 思路 通过正则 获取html字符串中里面的所有图片 base64 数组 然后每个图片base64 转成file 使用上传文件的函数 上传到服务器上. 将上传后获取到的图片访问url 替换成 数据里面的 img 的 src

    2024年01月23日
    浏览(44)
  • 谈谈:File、Blob、FileReader、ArrayBuffer、base64

    JavaScript 提供了一些 API 来处理文件或原始文件数据,例如:File、Blob、FileReader、ArrayBuffer、base64 等。下面就来看看它们都是如何使用的,它们之间又有何区别和联系。 1. Blob Blob全称为binary large Object 即二进制大对象,他是js中的一个对象,表示原始类似文件的数据。MDN中的解

    2024年02月09日
    浏览(38)
  • 将图片转换成Base64格式存入数据库以及在前端页面展示

    这个示例接口假设已经有了一个数据库连接池,并且已经注入或初始化了数据源。这个接口的功能是读取指定路径的图片文件,将其转换为Base64编码字符串,然后将其存入数据库中。可以通过调用 saveImageToDB 方法来实现这个功能。调用该方法时需要传入要存储的图片文件的路

    2024年02月16日
    浏览(37)
  • blob 和 base64 相互转换

    1. 方法 2. 使用方法 1. 方法 2. 使用方法

    2024年02月19日
    浏览(31)
  • base64 字符串转换为 Blob 对象

    在 JavaScript 中,可以使用以下代码将 base64 字符串转换为 Blob 对象: 其中, base64 是待转换的 base64 字符串, type 是 Blob 对象的 MIME 类型,默认值为 \\\'application/octet-stream\\\' 。该函数返回一个 Blob 对象。 可以像下面这样使用该函数: 其中, base64Str 是待转换的 base64 字符串, ima

    2024年02月15日
    浏览(30)
  • 将 base64 字符串转换为 Blob 对象

    在 JavaScript 中,可以使用以下代码将 base64 字符串转换为 Blob 对象: 其中, base64 是待转换的 base64 字符串, type 是 Blob 对象的 MIME 类型,默认值为 \\\'application/octet-stream\\\' 。该函数返回一个 Blob 对象。 可以像下面这样使用该函数: 其中, base64Str 是待转换的 base64 字符串, ima

    2024年02月16日
    浏览(51)
  • js实现base64,url,blob之间的相互转换

    一般来说前端展示图片会通过三种方式: url、base64、blob 1.url: 一般来说,图片的显示还是建议使用url的方式比较好。 2.base64: 如果图片较大,图片的色彩层次比较丰富,则不适合使用这种方式,因为其Base64编码后的字符串非常大,会明显增大HTML页面,影响加载速度。如果图

    2023年04月27日
    浏览(42)
  • 文件流互相转换(blob转base64,二进制流)

    跟用input上传文件的获取到的差不多 用URL.createObjectURL(blob)转化后是这样

    2024年02月10日
    浏览(35)
  • uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

    uni-app 支持 app端 h5端,微信小程序端 图片转换文件格式 和 base64,下方是插件市场的地址 app端 h5端,微信小程序端 图片转换文件格式 和 base64 - DCloud 插件市场 https://ext.dcloud.net.cn/plugin?id=13926

    2024年02月13日
    浏览(37)
  • js实现base64、url和blob之间相互转换的三种方式

    Blob对象表示一个不可变、原始数据的类文件对象,Blob表示的不一定是JavaScript原生格式的数据,下面这篇文章主要给大家介绍了关于js实现base64、url和blob之间相互转换的三种方式 url 转 base64 Blob 转 url Blob 转 base64 base64 转Blob base64 转 url 一般来说前端展示图片会通过三种方式:

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包