// 获取上传组件中的文件进行
// 图片压缩,获取上传组件中的文件
afterRead(file, index) {
console.log(this.fileList[index][0], 2566);
var vm = this;
var oBase64 = file.content;
var data = {};
console.log("压缩前3", oBase64.length / 1024);
vm.dealImage(oBase64, 0.2, function (base64) {
var base64 = base64.split(",")[1];
console.log("压缩后3", base64.length / 1024);
data.base64Img = base64;
var url = vm.api.customUrl + "/age_affirm/upload/base64Img";
vm.http.postData(vm, url, data, 1).then((res) => {
if (res.returnCode == "10001") {
vm.materialsInfo[index].picUrl = res.data;
console.log("****", vm.materialsInfo[index]);
}
});
});
},
// size 为压缩系数,越低图片越小
dealImage(base64, size, callback) {
let w = this.dWidth;
let newImage = new Image();
let quality = size; //压缩系数0-1之间
newImage.src = base64;
newImage.setAttribute("crossOrigin", "Anonymous"); //url为外域时需要
let imgWidth, imgHeight;
newImage.onload = function () {
imgWidth = this.width;
imgHeight = this.height;
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
if (Math.max(imgWidth, imgHeight) > w) {
if (imgWidth > imgHeight) {
canvas.width = w;
canvas.height = (w * imgHeight) / imgWidth;
} else {
canvas.height = w;
canvas.width = (w * imgWidth) / imgHeight;
}
} else {
canvas.width = imgWidth;
canvas.height = imgHeight;
quality = size;
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
let base64 = canvas.toDataURL("image/jpeg", quality); //压缩语句
// // 如想确保图片压缩到自己想要的尺寸,如要求在300-500kb之间,请加以下语句,quality初始值根据情况自定
// while (base64.length / 1024 > 500) {
// quality -= 0.01;
// base64 = canvas.toDataURL("image/jpeg", quality);
// }
// // 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑
// while (base64.length / 1024 < 300) {
// quality += 0.001;
// base64 = canvas.toDataURL("image/jpeg", quality);
// }
console.log("*******压缩后的图片大小*******");
console.log(base64.length / 1024);
callback(base64); //必须通过回调函数返回,否则无法及时拿到该值
};
},