import html2canvas from "html2canvas"; const getJpeg = dom =>{ return new Promise(resolve =>{ setTimeout(() => { html2canvas(dom,{useCORS: true,}).then(canvas =>{ let base64 = canvas.toDataURL('image/jpeg',.9); // let quality = 0.9 // 压缩系数0-1之间 let newImage = new Image() newImage.src = base64 newImage.setAttribute('crossOrigin', 'Anonymous') // url为外域时需要 // let imgWidth, // imgHeight // let w = undefined newImage.onload = function () { // w = this.width * 1 // 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 = 0.6 // } // ctx.clearRect(0, 0, canvas.width, canvas.height) // ctx.drawImage(this, 0, 0, canvas.width, canvas.height) // // 这里面的 this 指向 newImage // let smallBase64 = canvas.toDataURL('image/jpeg', quality) // 压缩语句 let fileData = dataURLtoFile(base64); let fileOfBlob = new File([fileData], new Date() + ".jpg"); // 命名图片名 // console.log(smallBase64); // resolve(base64ToFile(fileOfBlob)) resolve(fileOfBlob) } }) }, 100); }) } //base64转成blob function dataURLtoFile(dataURI, type) { let binary = atob(dataURI.split(",")[1]); let array = []; for (let i = 0; i < binary.length; i++) { array.push(binary.charCodeAt(i)); } return new Blob([new Uint8Array(array)], { type: "image/jpeg" }); } //转换 const base64ToFile = urlData =>{ const arr = urlData.split(','); const mime = arr[0].match(/:(.*?);/)[1] const bytes = atob(arr[1]) let n = bytes.length; const ia = new Uint8Array(n) while (n--){ ia[n] = bytes.charCodeAt(n); } return new File([ia],'jpeg',{type:mime}) } export default getJpeg