71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
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 |