c#图片base64去转义字符_C#实现图片转Base64编码

Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。

Base的索引表

Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符。数值代表字符的索引,这个是标准Base64编码规定的,如下图:

base64编码表

Base64的原理

Base64的码表只有64个字符, 如果要表达64个字符的话,使用6的bit即可完全表示(2的6次方为64)。

因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascll字符;

如果是字符串转换为Base64码, 会先把对应的字符串转换为ascll码表对应的数字, 然后再把数字转换为2进制。

图片转化为base64

图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址。

意义:网页上的每一个图片,都是需要消耗一个 http 请求下载而来的(所有才有了 csssprites 技术的应运而生,但是 csssprites 有自身的局限性)。

图片的下载始终都要向服务器发出请求,要是图片的下载不用向服务器发出请求,base64可以随着 HTML 的下载同时下载到本地.减少https请求。

优点

base64格式的图片是文本格式,占用内存小,转换后的大小比例大概为1/3,降低了资源服务器的消耗;

网页中使用base64格式的图片时,不用再请求服务器调用图片资源,减少了服务器访问次数。

缺点

base64格式的文本内容较多,存储在数据库中增大了数据库服务器的压力;

网页加载图片虽然不用访问服务器了,但因为base64格式的内容太多,所以加载网页的速度会降低,可能会影响用户的体验。

base64无法缓存,要缓存只能缓存包含base64的文件,比如js或者css,这比直接缓存图片要差很多,而且一般HTML改动比较频繁,所以等同于得不到缓存效益。

调用方式

#divare-aa, #divare-bb{

background: url(data:image/gif;base64,图片的base64字符串) no-repeat center;

}/*css样式表使用*/

因为base64的使用缺点,所以一般图片小于10kb的时候,我们才会选择使用base64图片,比如一些表情图片,太大的图片转换成base64得不偿失。当然,极端情况极端考虑。

C#代码实现图片转Base64

private string ImageConvertBase64StringForJs(Image img,ImageFormat imageFormat=null)

{

if (img == null)

{

return "";

}

imageFormat = img.RawFormat ?? imageFormat??ImageFormat.Jpeg;

using (MemoryStream ms = new MemoryStream())

{

img.Save(ms, img.RawFormat?? ImageFormat.Jpeg);

byte[] data = ms.ToArray();

return Convert.ToBase64String(data);

}

}

private Image Base64StringConvertImageForJs(string base64)

{

if (string.IsNullOrEmpty(base64))

{

throw new ArgumentNullException("base64参数不能为空");

}

byte[] bytes = Convert.FromBase64String(base64);

Image img = null;

using (MemoryStream memStream = new MemoryStream(bytes))

{

img = Image.FromStream(memStream);

}

return img;

}

喜欢 (4)or分享 (0)

支付宝扫码打赏

微信打赏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值