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

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的数组和常用函数”: JavaScript数组基础知识 JavaScript数组是一种可以存储多个值的变量类型,可以存储数字、字符串、布尔值等等各种类型的值。数组是由一个方括号围成的有序列表,在方括号中每个元素之间用逗号分隔。 例如,下面是一个由数字组成的数组: let myArray = [1, 2, 3, 4,…

    JavaScript 2023年5月27日
    00
  • js、jquery图片动画、动态切换示例代码

    下面是关于 “js、jquery图片动画、动态切换示例代码” 的详细攻略。 1. 简介 首先,图片动画是网页设计中非常重要的一部分,能够为网页提供更加生动、具有吸引力的效果。而 JavaScript 和 jQuery 是实现图片动画的最好选择。 2. 实现图片动画的具体代码 下面我们以两个示例代码的形式,帮助你快速学习如何使用 JavaScript 和 jQ…

    JavaScript 2023年6月10日
    00
  • 全面解析vue中的数据双向绑定

    全面解析Vue中的数据双向绑定 什么是数据双向绑定? Vue是一种数据驱动的前端JavaScript框架。在Vue中,数据双向绑定是指数据的变化会自动反映在视图上,而视图的变化也会自动更新到数据上。 Vue中的数据双向绑定原理 Vue中的数据双向绑定的原理基于Object.defineProperty()API来实现。Object.definePropert…

    JavaScript 2023年6月11日
    00
  • javascript判断css3动画结束 css3动画结束的回调函数

    关于javascript判断css3动画结束和css3动画结束的回调函数,下面是一个完整的攻略。 如何判断CSS3动画是否结束? CSS3动画有两个状态:正在运行和已经结束。我们可以通过 JavaScript 来判断动画是否结束,实现各种复杂的交互效果。 在判断CSS3动画结束的时候,我们需要监听动画事件。CSS3动画有两个相关的事件:transitione…

    JavaScript 2023年6月10日
    00
  • js父窗口关闭时子窗口随之关闭完美解决方案

    JS父窗口关闭时子窗口随之关闭是Web开发中常见的问题,很多网站都面临这个问题。这是因为子窗口的生命周期比父窗口短,如果不及时关闭,就会在用户离开页面后继续执行任务,可能会导致程序报错或耗费过多的资源。下面是一个完美解决方案的攻略。 1. 使用 window.onbeforeunload 事件 当父窗口即将关闭(例如用户点击关闭按钮时),window.onb…

    JavaScript 2023年6月10日
    00
  • 一个JavaScript用逗号分割字符串实例

    下面是一个JavaScript用逗号分割字符串实例的完整攻略。 问题 我们需要将一个字符串根据逗号进行分割,以便我们可以处理该字符串的各个部分。 解决方案 使用JavaScript的 split() 函数,该函数可以根据指定的分隔符将一个字符串分割为多个子字符串,并将这些子字符串存储在一个数组中。 语法如下: string.split(separator, …

    JavaScript 2023年5月28日
    00
  • Javascript中判断变量是数组还是对象(array还是object)

    如果要判断一个变量是否为数组或对象,可以使用JavaScript中的typeof运算符和Array.isArray()方法。下面详细讲解JavaScript中判断变量是数组还是对象的攻略。 使用typeof运算符 使用typeof运算符判断变量类型 使用typeof运算符可以返回一个字符串,表示变量类型。如果变量是数组,返回的类型为object,如果变量是对…

    JavaScript 2023年5月27日
    00
  • javascript之嵌套函数使用方法

    下面我来详细讲解一下“JavaScript之嵌套函数使用方法”的完整攻略。 什么是嵌套函数 嵌套函数是一种定义在另一个函数内部的函数,可以在外部函数范围内使用。嵌套函数有时候也称为内部函数、嵌套函数、局部函数或私有函数。 以下是一个简单的嵌套函数示例: function outerFunction() { console.log("这是外部函数&q…

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