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

yizhihongxing

JS前端技巧之图片格式转换攻略

什么是图片格式转换?

图片格式转换是将一种图片格式转换成另一种图片格式的过程。在前端开发中,常见的图片格式有JPEG、PNG、GIF等。图片格式转换可以实现以下需求:

  • 上传图片格式限制:例如要求用户上传的头像只能是JPEG格式。
  • 图片压缩:将大尺寸的图片转换为小尺寸的图片,降低图片占用的存储空间和带宽资源。
  • 图片处理:例如将图片转为灰度图或在图片上添加水印等。

File、Blob和base64是什么?

在图片格式转换中,我们常用三种数据类型:File、Blob和base64。

File

File对象是HTML5中新增的API,它表示一个文件,通常用于用户上传文件时使用。File对象包含了文件的元数据信息(文件名、文件大小、最后修改时间等)以及文件的实际内容。我们可以通过FileReader来读取File对象中的内容。

Blob

Blob是二进制大对象的缩写,表示一个二进制数据对象。Blob对象可以是文件内容的部分或者全部。Blob对象的数据通常来自于以下内容:

  • 通过原始的二进制数据。
  • 通过File对象的slice方法从大文件中裁剪出小的Blob对象。
  • 从一个数组或者字符串中创建Blob对象。

base64

base64是一种编码方式,它将二进制数据转换为文本数据,可用于在HTTP协议等中传递二进制数据。在图片格式转换中,我们常用base64来表示一个图片文件,其格式为"data:image/png;base64,iVBORw0KG......"。

实现图片格式转换的方法

下面分别介绍如何使用File、Blob和base64来实现图片格式转换。

使用File对象

  • 将图片文件从File类型转为Blob类型
//定义一个input元素
<input type="file" id="inputFile">

//获取input元素的文件
let file = document.getElementById('inputFile').files[0];

//将File类型转为Blob类型
let blob = file.slice(0,file.size,file.type);
  • 将图片文件从File类型转为Base64类型
//定义一个input元素
<input type="file" id="inputFile">

//获取input元素的文件
let file = document.getElementById('inputFile').files[0];

//使用FileReader进行读取
let fr = new FileReader();
fr.readAsDataURL(file);
//读取完成调用函数
fr.onload = function() {
  //获取读取完成的源数据(base64字符串)
  let base64Str = this.result;
  console.log(base64Str);
}

使用Blob对象

  • 将图片从Blob类型转为File类型
//获取一张图片
let img = document.getElementsByTagName('img')[0];

//将图片转为Blob类型
let blob = new Blob([img.src],{type: 'image/png'});

//创建一个File对象
let file = new File([blob],'demo.png',{type: 'image/png'});

使用base64

  • 将图片从base64类型转为Blob类型
//定义base64字符串
let base64Str = 'data:image/png;base64,iVBORw0KG......';

//使用atob将base64字符串转为Byte数组
let byteArr = atob(base64Str.split(',')[1]).split('').map((item) => { return item.charCodeAt(0)});

//将Byte数组转为Uint8Array数组
let uint8 = new Uint8Array(byteArr);

//创建Blob对象
let blob = new Blob([uint8],{type:'image/png'});

总结

本文介绍了前端图片格式转换的三种方式:File、Blob、base64。对于不同的需求,可以根据实际情况选择不同的方式来实现。同时,通过本文的示例代码,也可以更好地理解和掌握这些API的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js前端技巧之图片格式转换(File、Blob、base64) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Javascript实现秒表倒计时功能

    下面是“Javascript实现秒表倒计时功能”的完整攻略。 1. 准备工作 在开始编写代码实现倒计时功能之前,我们需要先准备一些基本的内容。具体包括以下几点: 1.1 确定计时的起点和终点 倒计时功能要想实现,我们需要确定计时的起点和终点。你可以自己设定一个时间,如5分钟(300秒),也可以通过用户输入动态获取倒计时的时间。 1.2 设计页面元素 在页面上…

    JavaScript 2023年5月27日
    00
  • javascript使用Blob对象实现的下载文件操作示例

    下面是关于“JavaScript使用Blob对象实现的下载文件操作示例”的完整攻略。 什么是Blob对象 Blob对象表示一段二进制数据,可以是图片、音频、文本等格式的数据。可以通过创建Blob对象来使这些数据能够被其他API所使用。在前端的文件操作中,我们常常会使用Blob对象作为操作的中转对象。 创建Blob对象的方法如下: const blob = n…

    JavaScript 2023年5月27日
    00
  • JS基于贪心算法解决背包问题示例

    JS基于贪心算法解决背包问题示例 什么是贪心算法 贪心算法是一种直接寻求局部最优解以达到全局最优的算法,即采取贪心策略,每次做出当时看来最好的选择,不考虑将来的结果,也不进行回溯,只关心眼前的选择会不会对当前局面产生最优的影响。贪心算法的特点是简单、高效、易于证明正确性,并且常用于求解组合优化问题,如背包问题、最小生成树问题、哈夫曼编码等。 背包问题 背包问…

    JavaScript 2023年5月28日
    00
  • JS数组扁平化、去重、排序操作实例详解

    JS数组扁平化、去重、排序操作实例详解 在JS编程中,经常需要对数组进行处理,比如将一个多维数组“扁平化”成一维数组、去掉数组中的重复元素、按照一定规则排序等操作。本文将介绍如何在JS中实现数组的扁平化、去重和排序操作,并给出相应的代码示例。 JS数组扁平化 所谓的数组扁平化,就是将一个嵌套多层的数组变成一个一维数组。比如: const arr = [1, …

    JavaScript 2023年5月27日
    00
  • 基于Bootstrap+jQuery.validate实现Form表单验证

    针对“基于Bootstrap+jQuery.validate实现Form表单验证”的攻略,我可以提供以下内容: 1. 引入相应库和插件 在HTML中引入Bootstrap和jQuery库,并在其下方引入jquery.validate插件及其语言包文件。 <!– Bootstrap CSS 文件 –> <link rel="st…

    JavaScript 2023年6月10日
    00
  • Javascript基础知识(三)BOM,DOM总结

    Javascript基础知识(三)BOM,DOM总结 BOM(浏览器对象模型) 浏览器对象模型(BOM)提供了一组与浏览器窗口有关的对象,有助于操作浏览器窗口和屏幕显示。BOM是由浏览器厂商自行定义的,因此不属于W3C标准。 BOM的核心对象是window对象,表示浏览器窗口和页面。window对象还可以通过自身属性和方法来操作浏览器窗口、页面、框架、历史记…

    JavaScript 2023年6月10日
    00
  • webpack output.library的16 种取值方法示例

    下面我将为你详细讲解关于“webpack output.library的16种取值方法示例”的完整攻略。 首先,我们需要了解output.library的含义。output.library是指将你的一些 JavaScript 代码打包到一个或多个库(library)中,使得其在浏览器环境或 Node.js 环境中能够被其他地方引用和使用。它的取值方式是一个字…

    JavaScript 2023年6月10日
    00
  • Javascript地址引用代码实例解析

    Javascript地址引用代码实例解析 本文介绍了Javascript中的地址引用,包括什么是地址传递,什么是值传递,以及在Javascript中如何进行地址引用。通过本文,你会深入理解地址传递和值传递的区别,并且能够结合代码进行实例分析。 什么是地址传递 在Javascript中,我们可以使用地址引用来访问和修改对象的属性。在地址传递中,函数的参数实际上…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部