base64计算文件大小方法(C#和js)
base64文件大小计算
有时候图片被base64之后需要计算图片大小,因为被编码后全是字符,计算文件大小可以反序列化成文件之后再获取大小,但是会比较麻烦。简单介绍一种利用base64编码原理计算大小的方法.
编码原理
要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’
Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。
如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
代码的实现
找一张图片文件https://www.baidu.com/img/bd_logo1.png 下载到本地base64编码之后的图片显示结果如下
JS代码的实现:
- 去掉base64编码中的前缀 data:image/png;base64,
var baseStr=document.getElementById("imgcase").getAttribute("src"),tag="base64,";
baseStr=baseStr.substring(baseStr.indexOf(tag)+tag.length);
- 去掉base64编码中的“=”号
var eqTagIndex=baseStr.indexOf("=");
baseStr=eqTagIndex!=-1?baseStr.substring(0,eqTagIndex):baseStr;
- 计算文件流大小
var strLen=baseStr.length;
var fileSize=strLen-(strLen/8)*2
alert("文件大小:"+fileSize);
完整代码:https://demohubs.github.io/frontendLab/baseimgfileSize.html
参考链接:https://www.cnblogs.com/peachyy/p/9015083.html
C#代码的实现:
方法其实都是一样的,就是注意C#里面的算数,可能会存在误差:
var tag = "data:image/png;base64,";
var BaseFile_data = input.IdentityCardIDPageBase64String.Replace(tag, null); //1.去掉base64编码中的前缀 data:image/png;base64,
BaseFile_data = BaseFile_data.Replace("=", null); //2.去掉base64编码中的“=”号
var strLen = BaseFile_data.Length;
var BaseFileLength = strLen - Math.Ceiling((decimal)strLen / 8) * 2;//3.计算文件流大小
base64计算文件大小方法(C#和js)的更多相关文章
- PHP计算一个目录文件大小方法
<?php $dirfile='../hnb'; /** *计算一个目录文件大小方法 *$dirfile:传入文件目录名 **/ function dirSize($dirfile) { $di ...
- Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net
Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...
- php 计算文件大小
计算文件大小 主要计算文件的 size 大小,默认的为Bytes的,所以运用三元运算符,来进行转换. 转换成 Bytes->KB->MB->GB /** * @param $size ...
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- 收缩Mysql的ibdata1文件大小方法
ibdata1是mysql数据库中一个数据文件了,你会发现它来越大了,下面我来介绍收缩Mysql的ibdata1文件大小方法 如果你有使用InnoDB来存储你的Mysql表,使用默认设置应该会碰到个非 ...
- 音频视频播放(jquery中将jquery方法转化成js方法)
在jQuery中没有音频视频直接播放的方法,我们在写音频视频时,应该将jquery的方法转化为js方法:play():pause() 补充: 将jq对象转化成js对象写法: var music=$ ...
- base64计算
zjzc01:/root# cat aa.pl use URI::Escape; use URI::Escape qw(uri_unescape); use MIME::Base64; use Dig ...
- window.opener方法的使用 js跨域
原文:window.opener方法的使用 js跨域 最近公司网站登陆加入了第三方登陆.可以用QQ直接登陆到我们网站,在login页面A中点QQ登陆时,调用了一个window.open文件打开一个lo ...
- 网络基础、ftp任务(进度条、计算文件大小、断点续传、搭建框架示例)
一.网络基础 1.端口,是什么?为什么要有端口? 端口是为了将同一个电脑上的不同程序进行隔离. IP是找电脑:端口是找电脑上的应用程序: 端口范围:1 – 65535 : 1 - 1024 不要 ...
- 上传附件(图片base64)封装方法
上传附件(图片base64)封装方法 php 上传附件,base64 项目中封装的接口: public function error($msg){ header("Content-type: ...
随机推荐
- DOM – Dimension & Coordinate (offset, client, computed, rect)
前言 很多年前有记入过一篇 box-sizing 和 dom width. 想想也挺可悲的, 那年我是负责后端的, 却要帮着前端去学习这些知识来解决问题... 也好, 现在 full stack, 也 ...
- 大模型应用开发初探 : 通用函数调用Planner
大家好,我是Edison. 上一篇,我们了解了什么是AI Agent以及如何用Semantic Kernel手搓一个AI Agent.有朋友留言说,自动函数调用对大模型有较高的要求,比如Azure O ...
- Maven 依赖项管理&&依赖范围
依赖管理 使用坐标导入jar包 1.在pom.xml 中编写 <dependencies> 标签 2.在 <dependencies> 标签中使用 < ...
- RTPS代理与转发服务
Proxy介绍 利用libevent实现网络连接和线程池.通过tcp连接的方式实现rtsp消息转发,再通过udp连接进行rtp与rtcp转发.报文解析使用到了Qt库.请尽量使用qmake进行编译.源码 ...
- OOP的核心思想
1. 封装 既是信息封装,把一些信息进行封装成对象,只保留部分接口和方法与外部联系,能有效避免程序间相互依赖,实现代码模块间松藕合 : 2. 继承 子类自动继承父类的属性和方法,继承实现了代码的重用性 ...
- JDBC连接数据库(mysql)基本实现-七步
// 包名 package com.zhulx; import java.sql.DriverAction; import java.sql.DriverManager; import java.sq ...
- 五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验
今年 3 月,KubeSphere 启动了首届扩展组件开发者训练营,吸引了 60 名开发者报名.经过一个半月的密集培训和实战演练,这些开发者成功打造了五款创新的扩展组件,现已全部上架至 KubeSph ...
- 利用 Kubernetes 内置 PodTemplate 管理 Jenkins 构建节点
作者:Rick Jenkins 可以很好地与 Kubernetes 集成,不管是控制器(controller)还是构建节点(agent),都能以 Pod 的形式运行在 Kubernetes 上. 熟悉 ...
- 操作系统_MPI程序设计
一.实验环境搭建 本次MPI集群环境是在电脑中安装mpi的sdk和应用程序后在visual studio 2022 上配置MPI环境. VC++目录--->包含目录--->添加MPI的in ...
- Angular 19 "要" 来了⚡
前言 Angular 19 预计会在 11 月中旬发布,目前 (2024-10-27) 最新版本是 v19.0.0-next.11. 这次 v19 的改动可不小哦,新增了很多功能,甚至连 effect ...