最新版本,问题比较少,但是,0.5.0版本,问题很多。
搞了2天,才完美解决。
//更改选中背景图
selInviteFun(para){
this.selIndex = para;
let bgImg = this.bannerList[para].poster + “?new”;//背景图
let that = this;
let headImg = this.headInfo.headImg;//头像
let coverImg = this.detailData.cover + “?new”;//封面
let codeImg = this.code;//二维码
let p1 = this.util.imageUrl2Base64(headImg).then((base64) => {
this.base64.headImg = base64;
});
let p2 = this.util.imageUrl2Base64(codeImg).then((base64) => {
this.base64.codeImg = base64;
});
let p3 = this.util.imageUrl2Base64(coverImg).then((base64) => {
this.base64.coverImg = base64;
});
let p4 = this.util.imageUrl2Base64(bgImg).then((base64) => {
this.base64.bgImg = base64;
});
//解决第一次加载的时候,背景图空白。必须等待所有图片加载完成
Promise.all([p1, p2, p3, p4]).then((data) => {
document.getElementById(‘outView’).style.display = ‘block’;
document.getElementById(‘outShow’).style.display = ‘none’;
//iPhone手机,devicePixelRatio的值,可能是2或者3
let scale = window.devicePixelRatio || 1;
let targetDom = document.getElementById("outView");
let width = targetDom.offsetWidth;
let height = targetDom.offsetHeight;
//解决图片模糊,先放大N倍,再缩小
let _canvas = document.createElement('canvas');
_canvas.width = width * scale;
_canvas.height = height * scale;
let _context = _canvas.getContext('2d');
_context.scale(scale, scale);
//解决图片偏移,位置还原
let left = targetDom.getBoundingClientRect().left;
let top = targetDom.getBoundingClientRect().top;
_context.translate(- left, - top);
let options = {
dpi: window.devicePixelRatio,
canvas: _canvas,
scale: scale,
width: width,
height: height,
logging: false,
useCORS: true, //跨域
allowTaint: true,
// timeout: 500
};
html2canvas(targetDom, options).then((canvas) =>{
//解决图片模糊,关闭抗锯齿
let context = canvas.getContext('2d');
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
that.base64.outImg = canvas.toDataURL("image/png");
document.getElementById('outView').style.display = 'none';
document.getElementById('outShow').style.display = 'block';
});
});
},