抖音微信小程序_js完成把图片的肯定途径转为b

2021-01-12 15:43 jianzhan
js实现把图片的绝对路径转为base64字符串、blob对象再上传       本文主要介绍了JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象再上传的方法,具有一定的参考价值,需要的朋友一起来看下吧

主题:

JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传。

用处:

从本地选择图片上传,如项目规定只能选择本项目文件夹下的图像上传为头像等。

主要思想:

使用canvas.toDataURL()方法将图片的绝对路径转换为base64编码.

具体用法:

在这我们引用淘宝服务器上的一张图片举例:

var imgSrc = "bao/uploaded/TB1qimQIpXXXXXbXFXXSutbFXXX.jpg";
// var imgSrc = "img/1.jpg";
 function getBase64(img){//传入图片路径,返回base64
 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.src = img;
 var deferred=$.Deferred();
 if(img){
 image.onload =function (){
 deferred.resolve(getBase64Image(image));//将base64传给done上传处理
 return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
 getBase64(imgSrc)
 .then(function(base64){
 console.log(base64);
 },function(err){
 console.log(err);
 });

此时在chrome测试,运行时会报错!

原因:

我们使用的是淘宝服务器上的图片,在本地服务器下访问,结果出现图片跨域的问题。

处理方案:

一、将图片放在本地服务器

var imgSrc = "img/1.jpg";//本地项目文件夹下的图片
 function getBase64(img){//传入图片路径,返回base64
 function getBase64Image(img,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.src = img;
 var deferred=$.Deferred();
 if(img){
 image.onload =function (){
 deferred.resolve(getBase64Image(image));//将base64传给done上传处理
 return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']
 getBase64(imgSrc)
 .then(function(base64){
 console.log(base64);
 },function(err){
 console.log(err);
 });

二、 跨域

想引用其他服务器下的图片该如何解决呢?

我们可以使用下面这一句代码解决跨域。

image.crossOrigin = '';

测试在chrome和firefox,ie9+下生效,在目前safari6以下貌似不支持。

 !DOCTYPE html 
 html 
 head 
 meta charset="UTF-8" 
 title nick getBase64 /title 
 /head 
 body 
 div img id="test" src="" alt=""/ /div 
 script src="libs/jquery/2.1.1/jquery.min.js" /script 
 script 
 var imgSrc = "bao/uploaded/TB1qimQIpXXXXXbXFXXSutbFXXX.jpg";
// var imgSrc = "img/1.jpg";
 function getBase64(img){//传入图片路径,返回base64
 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']
 getBase64(imgSrc)
 .then(function(base64){
 console.log(base64);
 },function(err){
 console.log(err);
 /script 
 /body 
 /html 

上面是本功能的完整代码,亲们,可以测试咯!

这样就本地图片和其他服务器上的图片都可以处理了!

结语:

想要了解更多的有关上传头像功能,可参考《》

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持凡科!