当前位置:首页 » 《随便一记》 » 正文

玩转前端之图片转base64(包教包会)

13 人参与  2024年02月07日 19:16  分类 : 《随便一记》  评论

点击全文阅读


在前端开发上传图片功能时,当图片上传成功后往往需要展示给用户看,之前的做法是直接把img标签的src赋值为一个http://xxx.xxx.com地址。造成图片会请求后端服务器造成了资源的浪费。当时才疏短浅,技艺不精,如今对本功能进行优化。

base64简介

这里只简单说明一下base64的作用,他会生成一个字符串,把这个字符串绑定到imgsrc属性上,这样就避免了我们前端去请求后端服务器资源,提升网站性能,这里介绍两种图片转base64的方法:

1. 利用FileReader这个Api

MDN是这样解释的:FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 FileBlob 对象指定要读取的文件或数据。

值得注意的是:这里恰好对应了我们前端上传的文件类型File或者Blob

FileReader事件处理
FileReader.onload:处理load事件。该事件在读取操作完成时触发,我们需要等图片加载完来执行操作。FileReader.onerror:处理error事件。该事件在读取操作发生错误时触发。FileReader.onloadend:处理loadend事件。该事件在读取操作结束时(要么成功,要么失败)触发。
实现代码
// 这里我单独写一个函数返回一个const getBase64 = (file)=> { // file为我们上传钩子函数获取到的file对象return new Promise(function(resolve, reject) {    let reader = new FileReader()    let imgResult = '' // imgResult最终转换后的base64的值    reader.readAsDataURL(file)    reader.onload = function() {      imgResult = reader.result as string    }    reader.onerror = function(error) {      reject(error)    }    reader.onloadend = function() {      // 成功后调用resolve回传值      resolve(imgResult)    }  })}

2. 利用canvas

使用canvas来生成图片base64字符串,主要是本地一些图片资源。

代码实现
 const getBase64 = (url) => { // 返回一个Promise return new Promise( resolve => { // 创建一个image标签let image = new Image()// 绑定urlimage.src = url// 挂载到页面document.body.appendChild(image)// 等待图片加载完毕后触发image.onload = function () {// 创建canvasconst canvas = document.createElement('canvas');const ctx = canvas.getContext('2d')// 设置宽度和高度canvas.width = image.widthcanvas.height = image.height// 绘制图片ctx.drawImage(image, 0, 0, image.width, image.height)// 转base64字符串canvas.toDataURL()} }}

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/67761.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 糟糕我始乱终弃的恩客是太子续集起点章节+全书阅读(谢怀琛沈鸢)书荒必看
  • 重生在高考前,我笑着送竹马和小太妹去庆祝成人礼(方子期孟知婉)_重生在高考前,我笑着送竹马和小太妹去庆祝成人礼(方子期孟知婉)
  • 知道自己是替身后,我选择自毁了独家首发_林昕巴掌宝藏文_小说后续在线阅读_无删减免费完结_
  • 我的娘子是大凶之物张一恒张一恒小说无删减阅读清爽版(张一恒)外篇+续集
  • 夫君停妻另娶挚友遗孀后,我杀疯了高分神作_贺朝小柔灵堂免费赏析_小说后续在线阅读_无删减免费完结_
  • 林冉顾承渊小说(许你万里晴空)+前传(林冉顾承渊)阅读
  • 京婚娇宠:是小尼姑也是嫡公主续集(姜以安周瑾臣)全本完整免费版_起点章节+后续(京婚娇宠:是小尼姑也是嫡公主)
  • 阮娇娇后续(纵她!禁欲小叔失控诱吻娇娇)(阮娇娇)整本畅享在线+无广告结局
  • 完结文流光错系断蓬之舟番外+完结列表_完结文流光错系断蓬之舟番外+完结(沈煜谢晚烟)
  • 重生1980:开局迎娶姐姐闺蜜小说(李毅唐雪)小说结尾+隐藏篇章(重生1980:开局迎娶姐姐闺蜜)畅享阅读
  • 全文一笑长明唯记相约前文+后续(江月肖楚宁)列表_全文一笑长明唯记相约前文+后续
  • 全文高考查分后,哥哥在我身上订满两百颗钉续集(沈眠月沈砚秋沈清欢)列表_全文高考查分后,哥哥在我身上订满两百颗钉续集

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1