base64图片编码大小与原图文件大小之间的联系

2023-11-13

base64图片编码大小与原图文件大小之间的联系



有时候我们需要把canvas画布的图画转换成图片输出页面,而用canvas生成的图片就是base64编码的,它是由数字、字母等一大串的字符组成的,但是我们需要获取它的文件流大小该怎么办呢?


Base64图片编码原理:

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’

详情请阅读- base64原理


当我们知道base64编码的图片的字符大小,怎么计算图片的文件流大小呢??

通过base64编码原理我们知道,base64的图片字符流中的每8个字符就有两个是用0补充,而且字符流的末尾还可能存在‘=’号,我们可以通过这个原理计算图片的文件流大小。


下面举例:

这是一张图片的base64编码:
data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAB9SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/6mHbP+LXDf/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//i104/5lwT/+RZkP/fksh/6eFaP/8/Pv/mG9N/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/+tjHL/6uHb//7+/v////////////Xx7v/8+/r//////6N/Yv99SR//fUkf/31JH/99SR//fUkf/35LIf/PvK3///////////////////////////////////////////+vj3b/fUkf/31JH/99SR//fUkf/31JH/++pI/////////////08Oz/vqSQ/8y3p///////////////////////u6CK/31JH/99SR//fUkf/31JH/+IWDL/+vn3///////s5d//iVo1/6B7XP/6+ff/8Orl/9TDtv+5nYb/nXZX/4NRKf9+SyL/fUkf/31JH/99SR//sJF3////////////onxe/35LIv+ge1z/ils1/31JH/99SR//fUkf/6qIbf/dz8T/1MK0/31JH/99SR//fUkf/8WunP///////Pv7/39MIv99SR//fUkf/31JH/99SR//fUkf/31JH//ay7///////+ri2/99SR//fUkf/31JH//Frpv///////38+/9/TCP/fUkf/31JH/99SR//fUkf/31JH/99SR//2szA///////q4dv/fUkf/31JH/99SR//r491////////////pIBi/31JH/99SR//fUkf/31JH/99SR//hVUt//j29P//////1MK1/31JH/99SR//fUkf/4dXMP/59/b//////+7o4/+MXjn/fUkf/31JH/99SR//gE0k/9XFuP///////////6aDZ/99SR//fUkf/31JH/99SR//up+I////////////9vPw/8OrmP+si3D/uZ2G/+ri2////////////97Rx/99SiD/fUkf/31JH/99SR//fUkf/31KIP/KtqX//v7+/////////////////////////////////+Xb0/+HWDH/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/6eFaP/l2tL//v7+////////////8evn/7yhi/+BTyb/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/4dXMP+Uakf/jV86/31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==



为了方便,我们用str代替上面编码。

1.需要计算文件流大小,首先把头部的data:image/png;base64,(注意有逗号)去掉。

str=str.substring(22);

2.找到等号,把等号也去掉

var equalIndex= str.indexOf(‘=’);
if(str.indexOf(‘=’)>0)
{
    str=str.substring(0, equalIndex);

}

3.原来的字符流大小,单位为字节

var strLength=str.length;

4.计算后得到的文件流大小,单位为字节

var fileLength=parseInt(strLength-(strLength/8)*2);

5.输出文件流大小

alert(fileLength);





以上是文章的主要内容,有问题请多多交流

推荐一个文件流图片转base64编码流图片的在线工具- base64转换

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

base64图片编码大小与原图文件大小之间的联系 的相关文章

随机推荐

  • RabbitMQ镜像集群搭建

    RabbitMQ镜像集群搭建 消息队列 在消息的传输过程中保存消息的容器 MQ角色 Broker 即消息队列服务器实体 Exchange 消息交换机 它指定消息按什么规则 路由到哪个队列 Queue 消息队列载体 每个消息都会被投入到一个或
  • 基于SpringBoot并整合MyBatis和Thymeleaf模板引擎开发的图书管理系统

    先展示下前端页面 登录页面 用户注册页面 一 管理员相关页面以及功能 管理员主页信息以及左侧导航栏 页头可查看当前管理员的信息
  • Unity Application.LoadLevel() 已过时

    解决办法 使用EditorSceneManager方法 https blog csdn net shenqiankk article details 100137502
  • 大数据技术——Scala语言基础

    Scala基础知识 控制结构 if条件表达式 有一点与Java不同的是 Scala中的if表达式的值可以赋值给变量 while循环 for循环 基本语法 其中 变量 lt 表达式 被称为 生成器 generator 守卫 guard 的表达
  • finereport连接oracle_FINEREPORT连接远程ORACLE数据库

    有如下错误提示 SEVERE CannotcreatePoolableConnectionFactory Listenerrefusedtheconnectionwiththefollowingerror ORA 12505 TNS lis
  • python小技巧大应用--基础实用漂亮界面(无边框,圆角,可拖拽)

    这回要实现一个漂亮的基础界面 要具有如下特色 无边框 圆角 漂亮的背景 可拖拽移动 具有最小化 关闭按钮 界面与代码分离 支持qss 先展示一下最后的效果 那就开始工作吧 1 通过Qt Designer实现界面设计 将设计好的界面保存为di
  • 【数据结构】设计循环队列详解

    我的个人主页 我们登上并非我们所选择的舞台 演出并非我们所选择的剧本 Enchiridion 设计循环队列 前言 1 什么是循环队列 2 循环队列的设计 2 1 MyCircularQueue k 实现 2 2 isEmpty 和 isFu
  • usb 命名乱的一批,怎么破

    USB 的命名真是乱的一批 命名里 一股浓浓的 印度风扑面而来 我想给 iso 文件加个驱动直接跪了 被绕进去了 幸运的是速度没乱 以下用速度整理该文档 USB2 0 时代 12 mbps usb1 0 480 mbps usb2 0 US
  • 什么是Restful?

    REST 简介 REST 是英文 Representational State Transfer 的缩写 有中文翻译为 具象状态传输 REST 这个术语是由 Roy Fielding 在他的博士论文 Architectural Styles
  • 大数据课程最后任务-hive处理数据

    好的这是第五次也就是不加额外挑战任务的最后任务 基本过程来自于厦门大学的hive教程 主要是hive处理20w的数据 两部分 一部分是安装 来自http dblab xmu edu cn blog 959 一步分是运行http dblab
  • Yii Framework 开发教程(34) Zii组件-AutoComplete示例

    CJuiAutoComplete 在用户输入时可以根据用户输入的前几个字符自动提示用户可以输入的文字 它封装了 JUI autocomplete插件 基本用法如下 php view plain copy print
  • vue3优雅实现移动端登录注册模块

    前言 近期开发的移动端项目直接上了vue3 新特性composition api确实带来了全新的开发体验 开发者在使用这些特性时可以将高耦合的状态和方法放在一起统一管理 并能视具体情况将高度复用的逻辑代码单独封装起来 这对提升整体代码架构的
  • VUE element-ui 之table表格表头插入输入框

    很简单
  • 手把手教你安装RabbitMQ(基于CentOS7系统)

    RabbitMQ简介及安装 什么是RabbitMQ RabbitMQ的特点 安装 安装Erlang 配置Erlang环境变量 验证环境 安装RabbitMQ 启动RabbitMQ 添加用户 访问 什么是RabbitMQ RabbitMQ是一
  • 财富自由?五年后为什么他月入十万,而我月入六千

    最近无论是在社群里还是 各种付费平台上 都能看到闪闪发光的一个词 财富自由 我好奇地去搜索了一下百度百科 财富自由是指 你无需为生活开销而努力 为钱工作的状态 简单的说 你的资产产生的被动收入 至少等于或超过你的日常开支 这是我们大多数人最
  • int、float和double的字节及位码

    int类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 32位 普通数值位 0 00000000 00000000000000000000001 flaot类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 3
  • 神经网络优化(二) - 激活函数和损失函数

    1 神经网络中的激活函数activation function 1 1 引入激活函数概念 神经网络的基本构成单元是神经元 在搭建神经网络一文中使用的神经元模型为 这个神经元模型是较为简化的基本神经元模型 还有一种理论模型包含有激活函数和偏置
  • live555学习之二RTSP协议说明

    RTSP协议 是一种基于C S架构的并用于双方通信约定的流媒体协议 全称实时流协议 Real Time Streaming Protocol 集成了网络实时控制 数据传输接收功能 客户端遵循协议发送指令控制多媒体的资源的功能如播放 暂停 停
  • row format delimited fields terminated by ','

    row format delimited fields terminated by 以 结尾的行格式分隔字段
  • base64图片编码大小与原图文件大小之间的联系

    base64图片编码大小与原图文件大小之间的联系 有时候我们需要把canvas画布的图画转换成图片输出页面 而用canvas生成的图片就是base64编码的 它是由数字 字母等一大串的字符组成的 但是我们需要获取它的文件流大小该怎么办呢 B