JavaScript实现图片转Base64的三种场景与拓展应用

作者:半夏时间:2026-10-22 15:40:04浏览:334

本文系统梳理了JavaScript中将图片转换为Base64格式的三种核心场景:用户本地文件上传、项目内部静态资源处理以及跨域网络图片获取。通过FileReader与Canvas API两种技术路径,结合文件大小校验与字符串截取等拓展技巧,提供完整的代码实现与注意事项,帮助开发者解决前端图片处理中的常见需求。

JavaScript图片转Base64场景概览

本文详细解析了JavaScript中实现图片转换为Base64格式的多种实际应用案例,旨在为开发者提供清晰的参考指南。

网络上关于JS将图片转为Base64的文章众多,但往往缺乏系统性。有的仅介绍本地图片转码,有的只涉及网络资源转化,缺乏全面覆盖。因此,本文将系统性地梳理并介绍各种典型场景下的实现方案。

本地文件上传处理

场景一:处理用户本地上传的资源。即当用户通过浏览器点击文件上传控件时,前端将选中的图片资源即时转换为Base64格式。


<input type="file" id="image"><br/>


var reader = new FileReader();
var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )超过2M上传失败
var file = $("#image")[0].files[0];
var imgUrlBase64;
if (file) {
  //将文件以Data URL形式读入页面
  imgUrlBase64 = reader.readAsDataURL(file);
  reader.onload = function (e) {
   //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64码部分(可选可不选,需要与后台沟通)
   if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
      alert( '上传失败,请上传不大于2M的图片!');
      return;
    }else{
      //执行上传操作
      alert(reader.result);
    }
  }
 }

项目内部资源转换

场景二:处理本项目内部的图片资源。即将项目目录下的静态图片转换为Base64字符串。虽然此场景有时可通过场景三(使用绝对路径)间接实现,但单独处理本地资源有其特定逻辑。


function(){
    var url = "static/img/js1.jpg";//这是站内的一张图片资源,采用的相对路径
    convertImgToBase64(url, function(base64Img){
    //转化后的base64
    alert(base64Img);
    });
}
//实现将项目的图片转化成base64
function convertImgToBase64(url, callback, outputFormat){
    var canvas = document.createElement('CANVAS'),
    ctx = canvas.getContext('2d'),
    img = new Image;
    img.crossOrigin = 'Anonymous';
    img.onload = function(){
      canvas.height = img.height;
      canvas.width = img.width;
      ctx.drawImage(img,0,0);
      var dataURL = canvas.toDataURL(outputFormat || 'image/png');
      callback.call(this, dataURL);
      canvas = null;
    };
    img.src = url;
}

网络图片资源获取

场景三:处理网络图片资源。即将互联网上的图片链接转换为Base64格式。值得注意的是,若场景二中的资源路径改为绝对路径,理论上也可套用场景三的方法进行处理。


function(){
    //这是网上的一张图片链接
    var url="http://p1.pstatp.com/large/435d000085555bd8de10";
    getBase64(url)
      .then(function(base64){
         console.log(base64);//处理成功打印在控制台
      },function(err){
         console.log(err);//打印异常信息
      });
}
//传入图片路径,返回base64
function getBase64(img){
    function getBase64Image(img,width,height) {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小
     var canvas = document.createElement("canvas");
     canvas.width = width ? width : img.width;
     canvas.height = height ? height : img.height;
     var ctx = canvas.getContext("2d");
     ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
     var dataURL = canvas.toDataURL();
     return dataURL;
    }
    var image = new Image();
    image.crossOrigin = '';
    image.src = img;
    var deferred=$.Deferred();
    if(img){
     image.onload =function (){
      deferred.resolve(getBase64Image(image));//将base64传给done上传处理
     }
     return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
    }
}

拓展应用与工具推荐

至此,图片Base64转码的三种主要场景已介绍完毕。接下来,基于上述基础操作,补充一些常见的拓展应用场景。

拓展一:后端接收纯字符串数据。在某些后端接口设计中,可能需要去除Base64数据头(即去掉“data:image/png;base64,”前缀),仅保留纯字符串部分,这通常通过截取字符串实现。


reader.result.substring(reader.result.indexOf(",") + 1)

拓展二:限制Base64资源大小。为防止上传过大图片导致性能问题,可在转换后判断其大小,若超过设定阈值(如2MB)则禁止上传。


var AllowImgFileSize = 2100000;  //上传图片最大值(单位字节)( 2 M = 2097152 B )
if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
   alert( '上传失败,请上传不大于2M的图片!');
   return;
}

其中reader.result即为完成Base64转码后的最终结果字符串。以上整理自网络资源并经实测验证,代码可用。

此外,推荐几款Base64在线工具供参考:

BASE64编码解码工具: http://tools.jb51.net/transcoding/base64

在线图片转换BASE64工具: http://tools.jb51.net/transcoding/img2base64

Base64在线编码解码 UTF-8版: http://tools.jb51.net/tools/base64_decode-utf8.php

Base64在线编码解码 gb2312版: http://tools.jb51.net/tools/base64_decode-gb2312.php

更多关于JavaScript相关内容可查看本站专题:《JavaScript加密解密技巧汇总》、《javascript编码操作技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

作者最新文章