如何使用JavaScript将图像转换为Base64字符串?

FileReader

来自MDN
FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(
或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

其中 File 对象可以是来自用户在一个元素上选择文件后返回的FileList对象,
也可以来自拖放操作生成的 DataTransfer对象,
还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果。

File 接口基于 Blob,继承了 blob 的功能并将其扩展以支持用户系统上的文件。

理解

从MDN了解到,FileReader读取文件,需要File或Blob格式
File又可以是input和canvas

input方案

<input id="inputFileToLoad" type="file" onchange="encodeImageFileAsURL();" />
<div id="imgTest"></div>
<script type='text/javascript'>
  function encodeImageFileAsURL() {

    var filesSelected = document.getElementById("inputFileToLoad").files;
    if (filesSelected.length > 0) {
      var fileToLoad = filesSelected[0];

      var fileReader = new FileReader();
		
      fileReader.onload = function(fileLoadedEvent) {
        var srcData = fileLoadedEvent.target.result; // <--- data: base64

        var newImage = document.createElement('img');
        newImage.src = srcData;

        document.getElementById("imgTest").innerHTML = newImage.outerHTML;
        alert("Converted Base64 version is " + document.getElementById("imgTest").innerHTML);
        console.log("Converted Base64 version is " + 
        				document.getElementById("imgTest").innerHTML);
      }
      
      //把这个blob或者file,转化为base64字符串,
      //是异步的,监听onload 的回掉函数拿结果
      fileReader.readAsDataURL(fileToLoad);
    }
  }
</script>

canvas方案


const sliceBase64Header = (base64String: string) =>
  base64String.replace(/^data:image\/[a-z]{3,4};base64,/, '');

通过canvas var img = "imgurl";

function getBase64Image(img) {
	var canvas = document.createElement("canvas");
	canvas.width = img.width;
	canvas.height = img.height;
	var ctx = canvas.getContext("2d");
	ctx.drawImage(img, 0, 0, img.width, img.height);
	var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();
	//canvas.toDataURL这个API就是把canvas对象转化为base64数据
	var dataURL = canvas.toDataURL("image/"+ext);
	return dataURL;
}

	var image = new Image();
	image.src = img;
	//设置跨域
	image.crossOrigin = 'Anonymous';
	image.onload = function(){
		var base64 = getBase64Image(image);
		console.log(base64);
	}
    image.onerror = function (err) {
        reject(err);
      };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值