Base64的学习

2023-05-16

来源

再一次看比如的代码的时候发现别人的图标是一串很长的字符串,而不是路径引用,从而开启了我对Base64的学习

解决

原生的atob和btoa方法进行Base64的编码

atob:解码 从a(base64) 到 b(lob) 的写法

btoa:编码  从 b(lob) 到 a(base64) 的写法

问题

那么我们如何再页面中使用Base64转义过的SVN图片呢?

1.直接用在线转换网站转换SVN代码

background: url('data:image/svg+xml;base64,PHN2ZyB0PSIxNTY3NjAwNTY3MzYzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM4MTEiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNMjc2IDE5OS4yaDM5MS44YzE0LjQgMCAyNi4xIDExLjcgMjYuMSAyNi4xdjU2MS42aC00NDRWMjI1LjNjLTAuMS0xNC40IDExLjYtMjYuMSAyNi4xLTI2LjF6IiBmaWxsPSIjRkZGRkZGIiBwLWlkPSIzODEyIi8+PHBhdGggZD0iTTcyMCA4MTNIMjIzLjdWMjI1LjNjMC0yOC44IDIzLjQtNTIuMiA1Mi4yLTUyLjJoMzkxLjljMjguOCAwIDUyLjIgMjMuNCA1Mi4yIDUyLjJWODEzeiBtLTQ0NC01Mi4yaDM5MS44VjIyNS4zSDI3NnY1MzUuNXoiIGZpbGw9IiMyRjJGMzMiIHAtaWQ9IjM4MTMiLz48cGF0aCBkPSJNMjEwLjcgNzYwLjhoNTIyLjRjMTQuNCAwIDI2LjEgMTEuNyAyNi4xIDI2LjEgMCAxNC40LTExLjcgMjYuMS0yNi4xIDI2LjFIMjEwLjdjLTE0LjQgMC0yNi4xLTExLjctMjYuMS0yNi4xLTAuMS0xNC40IDExLjYtMjYuMSAyNi4xLTI2LjF6IiBmaWxsPSIjMkYyRjMzIiBwLWlkPSIzODE0Ii8+PHBhdGggZD0iTTM1NC4zIDMwMy43aDIzNS4xYzE0LjQgMCAyNi4xIDExLjcgMjYuMSAyNi4xdjkxLjRjMCAxNC40LTExLjcgMjYuMS0yNi4xIDI2LjFIMzU0LjNjLTE0LjQgMC0yNi4xLTExLjctMjYuMS0yNi4xdi05MS40YzAtMTQuNCAxMS43LTI2LjEgMjYuMS0yNi4xeiIgZmlsbD0iIzhDQUFGRiIgcC1pZD0iMzgxNSIvPjxwYXRoIGQ9Ik01ODkuNCA0NzMuNUgzNTQuM2MtMjguOCAwLTUyLjItMjMuNC01Mi4yLTUyLjJ2LTkxLjRjMC0yOC44IDIzLjQtNTIuMiA1Mi4yLTUyLjJoMjM1LjFjMjguOCAwIDUyLjIgMjMuNCA1Mi4yIDUyLjJ2OTEuNGMwIDI4LjgtMjMuNCA1Mi4yLTUyLjIgNTIuMnpNMzU0LjMgMzI5Ljh2OTEuNGgyMzUuMXYtOTEuNEgzNTQuM3oiIGZpbGw9IiMyRjJGMzMiIHAtaWQ9IjM4MTYiLz48cGF0aCBkPSJNNzg1LjMgMzQyLjloNTIuMmMxNC40IDAgMjYuMSAxMS43IDI2LjEgMjYuMXYxMDQuNWMwIDE0LjQtMTEuNyAyNi4xLTI2LjEgMjYuMWgtNTIuMmMtMTQuNCAwLTI2LjEtMTEuNy0yNi4xLTI2LjFWMzY5YzAtMTQuNCAxMS43LTI2LjEgMjYuMS0yNi4xeiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzgxNyIvPjxwYXRoIGQ9Ik04MzcuNSA1MjUuN2gtNTIuMmMtMjguOCAwLTUyLjItMjMuNC01Mi4yLTUyLjJWMzY5YzAtMjguOCAyMy40LTUyLjIgNTIuMi01Mi4yaDUyLjJjMjguOCAwIDUyLjIgMjMuNCA1Mi4yIDUyLjJ2MTA0LjVjMC4xIDI4LjgtMjMuMyA1Mi4yLTUyLjIgNTIuMnpNNzg1LjMgMzY5djEwNC41aDUyLjJWMzY5aC01Mi4yeiIgZmlsbD0iIzJGMkYzMyIgcC1pZD0iMzgxOCIvPjxwYXRoIGQ9Ik03ODYuNSA3NDEuMWgtNzcuNnYtNTIuMmg3Ny42VjQ5Ny42aDUyLjJ2MTkxLjJjMCAyOC45LTIzLjQgNTIuMy01Mi4yIDUyLjN6IiBmaWxsPSIjMkYyRjMzIiBwLWlkPSIzODE5Ii8+PC9zdmc+')

2.通过btoa函数转换的SVN代码前加'data:image/svg+xml;base64'

3.通过JS赋值

bb为通过btoa加编码的SVN图片
 // /*三:通过JS赋值*/
 document.querySelector('.box').style.backgroundImage = `url(data:image/svg+xml;base64,${bb})`

解决base64 中文的bug

btoa 不可以直接将中文转base64

先将中文编码(encodeURIComponent)后再base64,还原就是,再将base64还原再解码,就可以解决base64不可以编码中文的bug

console.log(window.btoa(window.encodeURIComponent('嘻嘻哈哈哈哈啦啦啦啦')))
console.log(window.decodeURIComponent(window.atob('JUU1JTk4JUJCJUU1JTk4JUJCJUU1JTkzJTg4JUU1JTkzJTg4JUU1JTkzJTg4JUU1JTkzJTg4JUU1JTk1JUE2JUU1JTk1JUE2JUU1JTk1JUE2JUU1JTk1JUE2')))

css中内联SVG图片有比转Base64更好的方法

 SVG直接内联

方法就是把SVG代码直接内联在CSS的url()方法中,语法就是data: image / svg + xml; utf8, 加上完整的SVG代码即可!例如比较常用的background - image的url()方法

好处:比如可以直接修改颜色再fill中修改;兼容性提高了

.icon - arrow - down {
  width: 20px; height: 20px;
  background: url('data:image/svg+xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"><path fill="#00A5E0" d="M145.659,68.949c-5.101-5.208-13.372-5.208-18.473,0L99.479,97.233 L71.772,68.949c-5.1-5.208-13.371-5.208-18.473,0c-5.099,5.208-5.099,13.648,0,18.857l46.18,47.14l46.181-47.14 C150.759,82.598,150.759,74.157,145.659,68.949z"/></svg>') no - repeat center;
      background - size: 100 %;
    }

但是IE没用,和我们想中不一样,所以先进行URL编码,那么把这个放入background:url()中就是可以的

    encodeURIComponent('<svg version="1.1" ...</svg>')

这样就OK了但是转义可读性不强,因为都被URL编码

我们无需让所有的字符都encode也能让IE浏览器正确识别。根据前辈的实践,只需要对下面这些字符转义就能满足绝大多数的场景,它们是:",%,#,{,},<,>

这样那么一些单词比如fill就看的到那么fill关于颜色的值我们就可以直接改了

压缩工具:旭哥的 https://www.zhangxinxu.com/sp/svgo/

任意文件转base64

FileReader :

对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据

FileReader.readAsDataURL():

readAsDataURL 方法会读取指定的 Blob 或 File 对象。读取操作完成的时候,readyState 会变成已完成DONE,并触发 loadend 事件,同时readyState 中的 result 属性将包含一个data:URL格式的字符串(base64编码)以表示所读取文件的内容

    function previewFile() {
      var file = document.querySelector('input[type=file]').files[0];
      var reader = new FileReader();

      reader.addEventListener("load", function () {
        console.log(reader.result) // 输出文件内容
      }, false);

      if (file) {
        reader.readAsDataURL(file);
      }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Base64的学习 的相关文章

随机推荐

  • Linux网络编程:socket、客户端服务器端使用socket通信(TCP)

    1 socket概念 socket xff08 套接字 xff09 xff0c 用于网络中不同主机间进程的通信 socket是一个伪文件 xff0c 包含读缓冲区 写缓冲区 socket必须成对出现 socket可以建立主机进程间的通信 x
  • MySQL client does not support authentication protocol requested by server问题解决

    问题描述 xff1a 1251 Client does not support authentication protocol reuqested by server consider upgrading MySQL client 问题分析
  • kubernetes--集群环境搭建

    本文将搭建一套master node node k8s集群环境 xff0c 需要准备三台至少cpu gt 2G mem gt 2G的虚拟机 xff0c 步骤如下 xff1a 1 在所有节点配置hosts并节点间的连接性 分别在三个节点配置h
  • 数据库服务器的安装与配置

    理论基础 数据库服务器是当今应用最为广泛的一种服务器类型 xff0c 许多企业在信息化建设过程中都要购置数据库服务器 数据库服务器主要用于存储 查询 检索企业内部的信息 xff0c 因此需要搭配专用的数据库系统 xff0c 对服务器的兼容性
  • IDEA刷新与清除缓存

    idea清除缓存 刷新项目 idea刷新与清除缓存的正确菜单 Build Project xff1a 更新Project下所有的Module Build Module xff1a 更新指定的Module Rebuild Project xf
  • VNC远程桌面安装配置

    VNC远程桌面安装配置 服务器 xff1a Linux centos 7 0 客户端 xff1a Windows 10 1 服务器安装vnc服务端2 编辑vnc配置文件3 客户端安装4 解决端口访问的问题 1 服务器安装vnc服务端 直接用
  • 第1章 计算机基础知识

    1 1 计算机的基本概念 xff08 1 xff09 计算机的发展 计算机的诞生 1946年第一台电子数字计算机ENIAC由美国宾夕法尼亚大学研制成功 它是一个庞然大物 xff0c 共有18000个电子管 1500个继电器 xff0c 耗电
  • WIN7系统下搭建Docker,部署ODL与mininet

    1 docker 安装 版本 xff1a 18 03 win7系统下和win10系统稍有不同 安装流程 xff1a https www runoob com docker windows docker install html 由于国外源问
  • Debian10中文环境配置

    在安装系统的时候会有一个语言区域选项 xff0c 不管当时选的什么 xff0c 在这里都可以更改 同时解决中文乱码问题 以下操作最好在root用户下进行 xff0c root用户操作起来方便一些 xff0c 不会被权限困扰 换源 最好在做所
  • Redis删除key

    Redis 删除 key 的方式分为两种 xff0c 一种是单独删除指定的 key xff0c 另一种是根据通配符进行批量删除 1 删除指定的 key 1 登录 Redis 客户端 redis cli 注 xff1a 如果提示 Redis
  • Jlink下载stm32cube生成的程序会出现No Cortex-M SW Device Found错误,下载的第一次没事,第二次就会报错

    Jlink下载stm32cube生成的程序会出现No Cortex M SW Device Found错误 xff0c 下载的第一次正常 xff0c 第二次就会报错的问题 作为写stm32的神器stm32cubemx越来越多人开始使用 xf
  • Hadoop 典型Writable类详解

    Hadoop 典型Writable类详解 Hadoop将很多Writable类归入org apache hadoop io包中 xff0c 在这些类中 xff0c 比较重要的有Java基本类 Text Writable集合 ObjectWr
  • 判断js数据类型的方法

    基本类型 String xff0c Number xff0c Boolean xff0c Undefined xff0c Null xff0c Symbol 引用类型 Object 但是有些时候我们需要的是把数组啊 xff0c 函数啊 xf
  • javaScript 运行时环境

    js的执行阶段 网页的线程 JS引擎线程 xff1a 也称为JS内核 xff0c 负责解析执行Javascript脚本程序的主线程 xff08 例如V8引擎 xff09 事件触发线程 xff1a 归属于浏览器内核进程 xff0c 不受JS引
  • 如何用策略模式,优化你代码里的的if-else?

    最近有一个学妹在跟我沟通如何有效的去避免代码中一长串的if else判断或者switch条件判断 xff1f 针对更多的回答就是合理的去使用设计来规避这个问题 在设计模式中 xff0c 可以使用工厂模式或者策略模式来处理这类问题 xff0c
  • Vue组件生命周期执行顺序

    通过学习他人的博客学习到的知识点 xff0c 小白我 xff0c 顺便总结下 xff0c 引出问题 需求 xff1a 父组件刚更新完 xff0c 子组件要立马获取到父组件中传过来的值 created xff1a 在实例创建完成后被立即调用
  • 前端面试题---DOM测试36

    得分 这个题目7分我是得了4分 解析 第一问 var textarea 61 document querySelector 39 textarea 39 第二问 1 对象添加 textarea rows 61 5 2 元素添加 textar
  • 前端小测----CSS基础测试11

    得分 这个题目8分我得了5分 分析 关于HTML语义 xff1a article用在非常大段的完整的描述内容上 header是表示非常完整的整页的头部 xff0c 不是具体某一两个标题头 对于一个文字列表的标题 xff0c 级别h3 h6之
  • webpack对CSS使用alias相对路径

    问题来源 由于对页面的路由需要一些修改 xff0c 要对几乎全部的 vue文件添加一个父文件 xff0c 然后改路由 xff0c 但是问题来了 xff0c 没一个页面的文件 xff0c 资源路径都要改 xff0c import还好可以用al
  • Base64的学习

    来源 再一次看比如的代码的时候发现别人的图标是一串很长的字符串 xff0c 而不是路径引用 xff0c 从而开启了我对Base64的学习 解决 原生的atob和btoa方法进行Base64的编码 atob xff1a 解码 从a base6