js图片转base64, 支持网络地址 和 本地地址
在网上找了一个转的方法,如下:
// 转base64
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']
}
},
但是发现只能转 网络上的 地址, 如果是 本地的地址是 无法进行转换的, 所以 又重新找了一个方法 如下:
// let url = 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=935292084,2640874667&fm=27&gp=0.jpg'
let url = "../../../static/images/guiji.png"
function getUrlBase64(url, callback) {
var canvas = document.createElement("canvas"); //创建canvas DOM元素
var ctx = canvas.getContext("2d");
var img = new Image;
img.crossOrigin = 'Anonymous';
img.src = url;
img.onload = function () {
canvas.height = 60; //指定画板的高度,自定义
canvas.width = 85; //指定画板的宽度,自定义
ctx.drawImage(img, 0, 0, 60, 85); //参数可自定义
var dataURL = canvas.toDataURL("image/");
callback.call(this, dataURL); //回掉函数获取Base64编码
canvas = null;
};
}
getUrlBase64(url, function (base64) {
console.log('base64编码值',base64);//base64编码值
});
有些会出现跨域的问题,当时有遇到, 问题原因已找出, 见另外一篇 https://blog.youkuaiyun.com/qq_42341025/article/details/86676966