在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

C#实现图片转Base64编码

C# 清风 530℃ 0评论
Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。

Base的索引表

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

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样式表使用*/

<!--img标签调用-->
<img src="data:image/gif;base64,图片的base64字符串">
因为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;
        }

转载请注明:清风博客 » C#实现图片转Base64编码

喜欢 (4)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址