最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue使用mixins實現(xiàn)壓縮圖片代碼

 更新時間:2018年03月14日 10:29:26   作者:一念  
本篇文章主要介紹了Vue使用mixins實現(xiàn)壓縮圖片代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

圖片壓縮

創(chuàng)建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,進(jìn)行壓縮
      uploadSrc = canvas.toDataURL(file.type, maxSize / fileSize);
      uploadFile = this.convertBase64UrlToFile(uploadSrc, file.name); // 轉(zhuǎn)成file文件
     } else {
      uploadSrc = image.src;
      uploadFile = file;
     }

     let compressedSize = uploadFile.size / 1024;// 壓縮后圖片大小 (單位KB)
     // 判斷圖片大小是否小于maxSize,如果大于則繼續(xù)壓縮至小于為止
     if (compressedSize.toFixed(2) > maxSize) {
      this.checkAndHandleUpload(uploadFile);
     } else {
      let fileOptions = {uploadSrc, uploadFile};
      resolve(fileOptions);
     }
    });

   });

  },

  /**
   * 將圖片轉(zhuǎn)化為base64
   */
  imgBase64(file, callback) {
   // 看支持不支持FileReader
   if (!file || !window.FileReader) return;
   // 創(chuàng)建一個 Image 對象
   let image = new Image();
   // 綁定 load 事件處理器,加載完成后執(zhí)行
   image.onload = function () {
    // 創(chuàng)建 canvas DOM 對象
    let canvas = document.createElement('canvas');
    // 返回一個用于在畫布上繪圖的環(huán)境, '2d' 指定了您想要在畫布上繪制的類型
    let ctx = canvas.getContext('2d');
    // 如果高度超標(biāo) // 參數(shù),最大高度
    let MAX_HEIGHT = 3000;
    if (image.height > MAX_HEIGHT) {
     // 寬度等比例縮放 *=
     image.width *= MAX_HEIGHT / image.height;
     image.height = MAX_HEIGHT;
    }
    // 獲取 canvas的 2d 環(huán)境對象,
    // 可以理解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)) {
    // 創(chuàng)建一個reader
    let reader = new FileReader();
    // 將圖片將轉(zhuǎn)成 base64 格式
    reader.readAsDataURL(file);
    // 讀取成功后的回調(diào)
    reader.onload = function () {
     // 設(shè)置src屬性,瀏覽器會自動加載。
     // 記住必須先綁定事件,才能設(shè)置src屬性,否則會出同步問題。
     image.src = this.result;
    };
   }
  },

  /**
   * 把Base64轉(zhuǎn)換成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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3.0 響應(yīng)式系統(tǒng)源碼逐行分析講解

    Vue3.0 響應(yīng)式系統(tǒng)源碼逐行分析講解

    這篇文章主要介紹了Vue3.0 響應(yīng)式系統(tǒng)源碼逐行分析講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • vuecli3打包后出現(xiàn)跨域問題,前端配置攔截器無效的解決

    vuecli3打包后出現(xiàn)跨域問題,前端配置攔截器無效的解決

    這篇文章主要介紹了vuecli3打包后出現(xiàn)跨域問題,前端配置攔截器無效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • tomcat部署前端vue項目步驟(項目上線具體操作)

    tomcat部署前端vue項目步驟(項目上線具體操作)

    在實際開發(fā)中,我們經(jīng)常會遇到將Vue項目部署到Tomcat服務(wù)器上的需求,下面這篇文章主要給大家介紹了關(guān)于tomcat部署前端vue項目(項目上線具體操作)的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • 詳解vue-cli項目在IE瀏覽器打開報錯解決方法

    詳解vue-cli項目在IE瀏覽器打開報錯解決方法

    這篇文章主要介紹了詳解vue-cli項目在IE瀏覽器打開報錯解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • vue3+ts代理的使用

    vue3+ts代理的使用

    本文主要介紹了vue3+ts代理的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • Vue使用虛擬dom進(jìn)行渲染view的方法

    Vue使用虛擬dom進(jìn)行渲染view的方法

    這篇文章主要介紹了Vue使用虛擬dom進(jìn)行渲染view的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • vue 動態(tài)改變靜態(tài)圖片以及請求網(wǎng)絡(luò)圖片的實現(xiàn)方法

    vue 動態(tài)改變靜態(tài)圖片以及請求網(wǎng)絡(luò)圖片的實現(xiàn)方法

    下面小編就為大家分享一篇vue 動態(tài)改變靜態(tài)圖片以及請求網(wǎng)絡(luò)圖片的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 如何在vue3中優(yōu)雅的使用jsx/tsx詳解

    如何在vue3中優(yōu)雅的使用jsx/tsx詳解

    看了一些 Vue3 的組件庫源碼,發(fā)現(xiàn)無一例外都使用的jsx/tsx來實現(xiàn),而且實現(xiàn)方式也各不相同,下面這篇文章主要給大家介紹了關(guān)于如何在vue3中優(yōu)雅的使用jsx/tsx的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 基于Vue和Firebase實現(xiàn)一個實時聊天應(yīng)用

    基于Vue和Firebase實現(xiàn)一個實時聊天應(yīng)用

    在本文中,我們將學(xué)習(xí)如何使用Vue.js和Firebase來構(gòu)建一個實時聊天應(yīng)用,Vue.js是一種流行的JavaScript前端框架,而Firebase是Google提供的實時數(shù)據(jù)庫和后端服務(wù),結(jié)合這兩者,我們可以快速搭建一個功能強(qiáng)大的實時聊天應(yīng)用,需要的朋友可以參考下
    2023-08-08
  • vue3?element?plus?table?selection展示數(shù)據(jù),默認(rèn)選中功能方式

    vue3?element?plus?table?selection展示數(shù)據(jù),默認(rèn)選中功能方式

    這篇文章主要介紹了vue3?element?plus?table?selection展示數(shù)據(jù),默認(rèn)選中功能方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

盐池县| 黄龙县| 张家界市| 柳州市| 循化| 鄯善县| 贵阳市| 牡丹江市| 汉寿县| 黄龙县| 龙岩市| 壶关县| 和硕县| 利津县| 扶绥县| 长岛县| 漳浦县| 青岛市| 平和县| 团风县| 奎屯市| 酒泉市| 克什克腾旗| 元阳县| 滦南县| 同心县| 松潘县| 益阳市| 崇仁县| 保德县| 甘洛县| 巴东县| 栾城县| 永德县| 怀宁县| 霍邱县| 高雄市| 宣威市| 潜山县| 海南省| 龙里县|