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 相关文章推荐
Javascript调用函数方法的几种方式介绍
Mar 20 Javascript
JS选项卡动态替换banner图片路径的方法
May 11 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 Javascript
第一次接触神奇的Bootstrap菜单和导航
Aug 01 Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 Javascript
关于Javascript中defer和async的区别总结
Sep 20 Javascript
浅谈JS使用[ ]来访问对象属性
Sep 21 Javascript
axios的拦截请求与响应方法
Aug 11 Javascript
说说Vue.js中的functional函数化组件的使用
Feb 12 Javascript
原生JS实现萤火虫效果
Mar 07 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 Javascript
使用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往windows中添加用户
2006/12/06 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
更优雅的事件触发兼容
2011/10/24 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
python实现机器人卡牌
2019/10/06 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
联想英国官网:Lenovo英国
2019/07/17 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
民生工程实施方案
2014/03/22 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers