JS实现图片转换成base64的各种应用场景实例分析


Posted in Javascript onJune 22, 2018

本文实例讲述了JS实现图片转换成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转码的三种场景介绍完毕了,下面是基于以上的一下拓展:

拓展一:后台需要以纯字符串的形式上传(即去掉data:image/png;base64,截取字符串即可)

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

拓展二:判断base64资源大小,超过2M不让上传

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

其中reader.result即是base64转码后的结果。以上便是对网络上的一些资源的整理,亲测可用。

Javascript 相关文章推荐
window.open被浏览器拦截后的自定义提示效果代码
Nov 19 Javascript
Prototype Array对象 学习
Jul 19 Javascript
node.js中的fs.unlink方法使用说明
Dec 15 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
Nov 17 Javascript
jQuery动画效果实现图片无缝连续滚动
Jan 12 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
May 28 Javascript
jQuery 如何实现一个滑动按钮开关
Dec 01 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
Nov 17 Javascript
在create-react-app中使用sass的方法示例
Oct 01 Javascript
小程序关于请求同步的总结
May 05 Javascript
JS+JQuery实现无缝连接轮播图
Dec 30 jQuery
使用vue-infinite-scroll实现无限滚动效果
Jun 22 #Javascript
vue中实现左右联动的效果
Jun 22 #Javascript
JS实现关键词高亮显示正则匹配
Jun 22 #Javascript
JS获取指定月份的天数两种实现方法
Jun 22 #Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 #Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 #Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 #Javascript
You might like
微信自定义分享php代码分析
2016/11/24 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
如何实现动态删除javascript函数
2007/05/27 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
详解Python使用tensorflow入门指南
2018/02/09 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
护理自我鉴定范文
2013/10/06 职场文书
自我评价的范文
2014/02/02 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
公路绿化方案
2014/05/12 职场文书
校庆活动策划方案
2014/06/05 职场文书
计划生育宣传标语
2014/06/21 职场文书
教师先进事迹材料
2014/12/16 职场文书
党员年度个人总结
2015/02/14 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL