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 相关文章推荐
js 自定义的联动下拉框
Feb 07 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
JS中dom0级事件和dom2级事件的区别介绍
May 05 Javascript
Ionic默认的Tabs模板使用实例
Aug 29 Javascript
用js写的一个路由(简单实例)
Sep 24 Javascript
vue货币过滤器的实现方法
Apr 01 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
jquery select插件异步实时搜索实例代码
Oct 20 jQuery
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
vue-router之解决addRoutes使用遇到的坑
Jul 19 Javascript
js通过canvas生成图片缩略图
Oct 02 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
python中的tcp示例详解
2018/12/09 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
python os模块在系统管理中的应用
2020/06/22 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
学生就业推荐信
2013/11/13 职场文书
超市促销活动方案
2014/03/05 职场文书
物资采购方案
2014/06/12 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
学校推普周活动总结
2015/05/07 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang