实现的方式是上传图片file->获取base64->转化为canvas->canvas压缩后转化为base64->base64转化为file

    1. <template>
    2. <div>
    3. <input ref="uploadinput" type="file" name="file" accept="image/*" @change="changeImg"/>
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. data(){
    9. return {
    10. picurl:""
    11. }
    12. },
    13. methods: {
    14. async changeImg(){
    15. let that = this
    16. let input = this.$refs.uploadinput
    17. let file = input.files[0]
    18. this.picurl = await this.getBase64(file)
    19. let newfile = dataURLtoFile(this.picurl,"pic.jpeg")
    20. },
    21. //获取Base64
    22. getBase64(file) {
    23. return new Promise((resolve, reject) => {
    24. const reader = new FileReader();
    25. reader.readAsDataURL(file);
    26. reader.onload = () => {
    27. this.canvasDataURL(reader.result,1500).then(r=>{
    28. resolve(r);
    29. }).catch(e=>{
    30. reject(e);
    31. })
    32. }
    33. reader.onerror = error => reject(error);
    34. });
    35. },
    36. //图片压缩处理
    37. canvasDataURL(re,w){
    38. return new Promise((resolve, reject) =>{
    39. let newImg=new Image();
    40. newImg.src=re;
    41. let imgWidth,imgHeight;
    42. newImg.onload = () =>{
    43. let img=document.createElement("img");
    44. img.src=newImg.src;
    45. imgWidth=img.width;
    46. imgHeight=img.height;
    47. let canvas=document.createElement("canvas");
    48. canvas.width=imgWidth;
    49. canvas.height=imgHeight;
    50. let ctx=canvas.getContext("2d");
    51. ctx.clearRect(0,0,imgWidth,imgHeight);
    52. ctx.drawImage(img,0,0,imgWidth,imgHeight);
    53. resolve(canvas.toDataURL("image/jpeg",0.2))
    54. }
    55. newImg.onerror = error => reject(error);
    56. })
    57. },
    58. //将base64转换为文件
    59. dataURLtoFile(dataurl, filename) {
    60. let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
    61. bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    62. while(n--){
    63. u8arr[n] = bstr.charCodeAt(n);
    64. }
    65. return new File([u8arr], filename, {type:mime});
    66. },
    67. }
    68. }
    69. </script>
    70. <style lang="scss" scoped>
    71. </style>