需求:h5页面弹窗展示的dom和长按保存到手机的图片不一样,保存下来的带二维码
思路:弹窗展示一个dom,用canvas插件针对另外一个弹窗内容(透明度不为0,放到展示弹窗的下层),生成一个img放到弹窗的上层 opacity设置为0即可。
代码如下:
this.imgRef = React.createRef();
state 中存放img
getBase64Image = (url, callback, outputFormat) => { var canvas = document.createElement(‘CANVAS‘), ctx = canvas.getContext(‘2d‘), img = new Image(); img.crossOrigin = ‘‘; img.onload = (res) => { canvas.height = img.height; canvas.width = img.width; ctx.drawImage(img, 0, 0); var dataURL = canvas.toDataURL(outputFormat || ‘image/png‘); this.setState({ img: dataURL, }, () => { this.createPicture(); }) canvas = null; }; img.src = `${url}?timeStamp=${+new Date()}`; } createPicture = () => { const scale = this.getPixelRatio(); // 获取要转换的元素 html2canvas(this.imgRef.current, { scale: scale, useCORS: true, // 开启跨域设置,需要后台设置cors }).then((canvas) => { // toDataURL函数生成img标签的可用数据 图片格式转成 base64 let dataURL = canvas.toDataURL("image/png"); this.setState({ share_image: dataURL, canvasImgOnLoad: true, }); }); };
原文:https://www.cnblogs.com/xiaoyaoweb/p/15066856.html