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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:20:42
字體:
來源:轉載
供稿:網友

本文介紹了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});  } }};            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 旌德县| 江门市| 桦甸市| 航空| 河源市| 鄄城县| 无为县| 云和县| 昆山市| 玉龙| 宾川县| 广灵县| 阳东县| 广河县| 潜江市| 柳河县| 肇庆市| 津南区| 丹棱县| 裕民县| 遵义县| 政和县| 海城市| 弋阳县| 青浦区| 永平县| 库车县| 容城县| 衢州市| 剑川县| 庄河市| 纳雍县| 伊通| 汝南县| 乐业县| 团风县| 祁阳县| 西乌珠穆沁旗| 齐河县| 丰镇市| 绿春县|