实现的方式是上传图片file->获取base64->转化为canvas->canvas压缩后转化为base64->base64转化为file
<template><div><input ref="uploadinput" type="file" name="file" accept="image/*" @change="changeImg"/></div></template><script>export default {data(){return {picurl:""}},methods: {async changeImg(){let that = thislet input = this.$refs.uploadinputlet file = input.files[0]this.picurl = await this.getBase64(file)let newfile = dataURLtoFile(this.picurl,"pic.jpeg")},//获取Base64getBase64(file) {return new Promise((resolve, reject) => {const reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => {this.canvasDataURL(reader.result,1500).then(r=>{resolve(r);}).catch(e=>{reject(e);})}reader.onerror = error => reject(error);});},//图片压缩处理canvasDataURL(re,w){return new Promise((resolve, reject) =>{let newImg=new Image();newImg.src=re;let imgWidth,imgHeight;newImg.onload = () =>{let img=document.createElement("img");img.src=newImg.src;imgWidth=img.width;imgHeight=img.height;let canvas=document.createElement("canvas");canvas.width=imgWidth;canvas.height=imgHeight;let ctx=canvas.getContext("2d");ctx.clearRect(0,0,imgWidth,imgHeight);ctx.drawImage(img,0,0,imgWidth,imgHeight);resolve(canvas.toDataURL("image/jpeg",0.2))}newImg.onerror = error => reject(error);})},//将base64转换为文件dataURLtoFile(dataurl, filename) {let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);while(n--){u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], filename, {type:mime});},}}</script><style lang="scss" scoped></style>
