国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue使用mixins實現壓縮圖片代碼

2019-11-19 14:10:20
字體:
來源:轉載
供稿:網友

本文介紹了Vue使用mixins實現壓縮圖片代碼,分享給大家,具體如下:

圖片壓縮

創建mixins image-compress.js

export default { methods: {  /**   * 檢查并壓縮圖片大小   */  checkAndHandleCompression(file) {   return new Promise((resolve, reject) => {    this.imgBase64(file, (image, canvas) => {     let maxSize = 2 * 1024; // 2M (單位KB)     let fileSize = file.size / 1024; // 圖片大小 (單位KB)     let uploadSrc, uploadFile;     if (fileSize > maxSize) { // 如果圖片大小大于maxSize,進行壓縮      uploadSrc = canvas.toDataURL(file.type, maxSize / fileSize);      uploadFile = this.convertBase64UrlToFile(uploadSrc, file.name); // 轉成file文件     } else {      uploadSrc = image.src;      uploadFile = file;     }     let compressedSize = uploadFile.size / 1024;// 壓縮后圖片大小 (單位KB)     // 判斷圖片大小是否小于maxSize,如果大于則繼續壓縮至小于為止     if (compressedSize.toFixed(2) > maxSize) {      this.checkAndHandleUpload(uploadFile);     } else {      let fileOptions = {uploadSrc, uploadFile};      resolve(fileOptions);     }    });   });  },  /**   * 將圖片轉化為base64   */  imgBase64(file, callback) {   // 看支持不支持FileReader   if (!file || !window.FileReader) return;   // 創建一個 Image 對象   let image = new Image();   // 綁定 load 事件處理器,加載完成后執行   image.onload = function () {    // 創建 canvas DOM 對象    let canvas = document.createElement('canvas');    // 返回一個用于在畫布上繪圖的環境, '2d' 指定了您想要在畫布上繪制的類型    let ctx = canvas.getContext('2d');    // 如果高度超標 // 參數,最大高度    let MAX_HEIGHT = 3000;    if (image.height > MAX_HEIGHT) {     // 寬度等比例縮放 *=     image.width *= MAX_HEIGHT / image.height;     image.height = MAX_HEIGHT;    }    // 獲取 canvas的 2d 環境對象,    // 可以理解Context是管理員,canvas是房子    ctx.clearRect(0, 0, canvas.width, canvas.height);    // 重置canvas寬高    canvas.width = image.width;    canvas.height = image.height;    // 將圖像繪制到canvas上    ctx.drawImage(image, 0, 0, image.width, image.height);    callback(image, canvas);   };   if (/^image/.test(file.type)) {    // 創建一個reader    let reader = new FileReader();    // 將圖片將轉成 base64 格式    reader.readAsDataURL(file);    // 讀取成功后的回調    reader.onload = function () {     // 設置src屬性,瀏覽器會自動加載。     // 記住必須先綁定事件,才能設置src屬性,否則會出同步問題。     image.src = this.result;    };   }  },  /**   * 把Base64轉換成file文件   */  convertBase64UrlToFile(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});  } }};

example

<template>  ...</template><script> import imageUploadMixins from '@/mixins/image-compress';  export default {   mixins: [imageUploadMixins],    ...    methods:{    handleUploadImage(e){      let file = e.target.files[0];      this.checkAndHandleCompression(file).then( fileOptions => {        // let {uploadSrc, uploadFile} = fileOptions;                // 壓縮完成使用 uploadSrc, uploadFile                ...              });    }  }   ...   }</script><style>  ...</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九江市| 察雅县| 唐山市| 楚雄市| 南宫市| 呼玛县| 大庆市| 宜君县| 昌江| 扎赉特旗| 凤凰县| 通江县| 剑河县| 高邑县| 军事| 沙洋县| 通榆县| 于田县| 鄂州市| 锡林郭勒盟| 荔浦县| 贵德县| 常宁市| 白朗县| 襄城县| 商都县| 平顶山市| 阿克陶县| 体育| 呈贡县| 文登市| 革吉县| 广饶县| 宕昌县| 中山市| 福贡县| 循化| 东城区| 新密市| 扶余县| 普陀区|