在项目开发中,不免会遇到图片上传的问题,除了用一些框架自带的方法,我们是需要了解原生JS怎么完成图片的上传与转换的。
一、图片转换成base64的各种场景
1 本地图片: 2 <input type="file" id="image"><br/> 3 4 var reader = new FileReader(); 5 var AllowImgFileSize = 2100000; // 上传图片最大值(单位字节)(2m) 6 var file = $("#image")[0].files[0]; 7 var imgUrlBase64; 8 if (file) { 9 // 将文件以Data URL形式读入页面 10 imgUrlBase64 = reader.readAsDataURL(file); 11 reader.onload = function (e) { 12 // var ImFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length; //截取base64码部分(可选可不选,需要与后台沟通) 13 if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) { 14 alert('上传失败,请上传不大于2M的图片'); 15 return; 16 }else{ 17 // 执行上传操作 18 alert(reader.result); 19 } 20 } 21 } 22 23 24 项目中的图片,本地相对路径的图片 25 26 function(){ 27 var url = "static/img/js1.jpg"; // 这是站内的一张图片资源,采用相对路径 28 convertImgToBase64(url, function(base64Img) { 29 //转化后的base64 30 alert(base64Img) 31 }) 32 } 33 34 // 实现将项目的图片转化成base64 35 36 function convertImgToBase64(url, callback, outputFormat){ 37 var canvas = document.createElement('CANVAS'), 38 ctx = canvas.getContext('2d'), 39 img = new Image; 40 img.crossOrigin = 'Anonymous'; 41 img.onload = function(){ 42 canvas.height = img.height; 43 canvas.width = img.width; 44 ctx.drawImage(img,0,0); 45 var dataURL = canvas.toDataURL(outputFormat || 'image/png'); 46 canvas = null; 47 } 48 img.src = url; 49 } 50 51 网络图片资源转化为base64 52 function() { 53 //这是网上的一张图片链接 54 var url="http://pl.pstatp.com/large/435d000085555bd8de10"; 55 getBase64(url) 56 .then(function(base64){ 57 console.log(base64); //处理成功打印在控制台 58 }), function(err) { 59 console.log(err); // 打印异常信息 60 }); 61 } 62 63 //传入图片路劲,返回base64 64 function getBase64(img){ 65 function getBase64Image(img,width,height) { //width、height调用时传入具体像素值,控制大小,不传则默认图像大小 66 var canvas = document.createElement("canvas"); 67 canvas.width = width ? img.width; 68 canvas.height = height ? height : img.height; 69 70 var ctx = canvas.getContext("2d"); 71 ctx.drawImage(img, 0, 0, canvas.width, canvas.height); 72 var dataURL = canvas.toDataURL(); 73 return dataURL; 74 } 75 var image = new Image(); 76 image.crossOrigin = ''; 77 image.src = img; 78 var deferred = $.Deferred(); 79 if(img){ 80 image.onload = function(){ 81 deferred.resolve(getBase64Image(image)); //将base64传给done上传处理 82 } 83 return deferred.promise(); // 问题要让onload完成后再return sessionStorage['imgTest] 84 } 85 }