91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-21 21:33:35 來源:腳本之家 閱讀:194 作者:一念 欄目:web開發

本文介紹了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>

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青海省| 江陵县| 吉安市| 昆山市| 梨树县| 阆中市| 教育| 石台县| 青神县| 阿拉善左旗| 海南省| 饶阳县| 望江县| 绥宁县| 金阳县| 盐津县| 禄丰县| 璧山县| 南充市| 微山县| 江源县| 应用必备| 耿马| 仁寿县| 营口市| 华蓥市| 安福县| 孟村| 资中县| 定州市| 西充县| 无棣县| 于田县| 合川市| 迁西县| 黔江区| 西青区| 洞头县| 汕头市| 策勒县| 峨山|