base64编码与图片之间相互转换

题记:

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一

1、将base64转换成图片

javascript 复制代码
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0 DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="">

只需要在img 标签中引入即可,注意要加上标明前缀(data:image/png;base64),否则并不知道一串代码是干啥的

2、将图片转成base64

javascript 复制代码
var img = "https://img2.baidu.com/it/u=2163681967,1120787845&fm=253&fmt=auto&app=138&f=PNG?w=200&h=267";
    function getBase64Image(img) {
           var canvas = document.createElement("canvas");
           console.log(img.width,img.height)
           canvas.width = img.width;
           canvas.height = img.height;

           var ctx = canvas.getContext("2d");
           ctx.drawImage(img, 20, 20, 200, 200);
           var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();
           var dataURL = canvas.toDataURL("image/"+ext);
           return dataURL;
       }
    var canvas=document.querySelector('canvas');
    // 获取画笔
    var context=canvas.getContext('2d');
    // 创建一个img标签 构造函数方式new Image();
    var image=new Image();
    image.crossOrigin = 'anonymous';
    // console.log(img);
    image.src=img
    console.log('image',image)
    // 绘制图片,drawImage有5个参数:要绘制得图片/视频,开始x、y轴位置,宽高
    image.onload=function(){
        context.drawImage(image,0,0,200,200);
        var base64 = getBase64Image(image);
           console.log(base64);
    }

通过canvas.toDataURL将图片转换成base64,需要注意的是,在转换成 dataURL 前必须先确保图片成功加载到,于是.toDataURL()方法应该写在的onload异步事件中。

样式

跨域问题

当img的地址存在跨域时,而且服务器不允许跨域,这样是转换不了的,当服务器允许跨域时,前端的图片也要设置跨域image.crossOrigin = 'anonymous';

延申了解:

什么是"可打印字符"呢?为什么要用它来传输8Bit字节码呢?

在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。

Base64,就是使用64个可打印字符来表示二进制数据的方法。Base64的索引与对应字符的关系如下表所示:

在实际项目中,需要将图片编码为Base64格式,然后进行传送。比如,腾讯云中一些实名认证的服务,就需要将图片编码为Base64格式,然后调用API接口进行验证。

相关推荐
许彰午4 小时前
14_Java泛型完全指南
java·windows·python
智慧物业老杨4 小时前
司法绿色通道下的物业纠纷数智化解决方案——基于“三优先“机制的全流程技术落地实践
java·django
2601_961194024 小时前
2026初级会计实务公式总结大全|计算题公式手册PDF
java·spring·eclipse·pdf·tomcat·hibernate
做个文艺程序员4 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
广州灵眸科技有限公司4 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) Easy-Eai编译环境准备与更新
服务器·前端·人工智能·python·深度学习
万少5 小时前
我把 Kimi 接进微信,几分钟做了个随手出图助手
前端
xiaofeichaichai5 小时前
网络请求与实时通道
前端·网络
kTR2hD1qb6 小时前
从 Responses API 到 Chat Completions:一个模型网关的设计复盘
linux·前端
小欣加油7 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode