<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      前端圖片壓縮方案

      在Vue 3項目中壓縮圖片,可以有效優(yōu)化圖片體積,提升加載性能和用戶體驗。以下是幾種常用方案和核心代碼示例。

      下表概述了主要的壓縮方案,你可以根據(jù)項目需求選擇:

      方案 特點 適用場景
      compressorjs 功能豐富,配置靈活,支持通過質量或尺寸壓縮 需要精細控制壓縮參數(shù)的項目
      browser-image-compression 支持WebWorker,防止界面卡頓,可限制文件大小或尺寸 需壓縮大圖片且避免阻塞主線程
      image-conversion 支持按指定大?。ㄈ鏚B)進行壓縮 需要精確控制輸出文件大小的場景
      Canvas API手動壓縮 不依賴第三方庫,可控性高 簡單壓縮需求或希望減少依賴的項目
      uni-app項目 使用專用的image-utils插件 開發(fā)多端應用(如小程序、App)

      ??? 使用第三方庫壓縮

      以下是幾種常用庫的具體使用方法。

      1. Compressor.js

      Compressor.js是一款配置靈活的圖片壓縮庫。

      安裝

      npm install compressorjs
      

      在Vue組件中使用

      <template>
        <input type="file" @change="handleImageUpload" accept="image/*" />
      </template>
      
      <script setup>
      import Compressor from 'compressorjs';
      
      const handleImageUpload = (event) => {
        const file = event.target.files[0];
        if (!file) return;
      
        new Compressor(file, {
          quality: 0.6, // 壓縮質量 (0-1)
          success(result) {
            // 處理壓縮后的文件,例如上傳到服務器
            const compressedFile = new File([result], file.name, { type: result.type });
            console.log('壓縮成功', compressedFile);
          },
          error(err) {
            console.error('壓縮失敗:', err.message);
          },
        });
      };
      </script>
      

      2. browser-image-compression

      此庫支持WebWorker,壓縮大圖片時不易阻塞界面交互。

      安裝

      npm install browser-image-compression
      

      在Vue組件中使用

      <template>
        <input type="file" @change="handleImageUpload" accept="image/*" />
      </template>
      
      <script setup>
      import imageCompression from 'browser-image-compression';
      
      const handleImageUpload = async (event) => {
        const file = event.target.files[0];
        if (!file) return;
      
        const options = {
          maxSizeMB: 1, // 最大文件大?。∕B)
          maxWidthOrHeight: 1920, // 最大寬或高
          useWebWorker: true, // 使用WebWorker,避免阻塞界面
          initialQuality: 0.8, // 初始壓縮質量(0-1),但browser-image-compression選項名可能為`initialQuality`,請注意文檔
        };
      
        try {
          const compressedFile = await imageCompression(file, options);
          console.log('壓縮成功', compressedFile);
          // 注意:compressedFile是一個Blob或File對象,可直接用于上傳
        } catch (error) {
          console.error('壓縮失敗:', error);
        }
      };
      </script>
      

      3. image-conversion

      此庫的一個特色是支持按指定大小(如KB)進行壓縮。

      安裝

      npm install image-conversion
      

      在Vue組件中使用

      <template>
        <input type="file" @change="handleFileChange" accept="image/*">
        <img v-if="compressedImage" :src="compressedImage" alt="Compressed Image" />
      </template>
      
      <script setup>
      import { ref } from 'vue';
      import imageConversion from 'image-conversion';
      
      const compressedImage = ref(null);
      
      const handleFileChange = async (event) => {
        const file = event.target.files[0];
        if (!file) return;
      
        try {
          // 壓縮到大約200KB
          const compressedFile = await imageConversion.compressAccurately(file, {
            size: 200, // 目標大小,單位KB
            accuracy: 0.9 // 壓縮精度
          });
          compressedImage.value = URL.createObjectURL(compressedFile);
          console.log('壓縮成功', compressedFile);
        } catch (error) {
          console.error('Error compressing image:', error);
        }
      };
      </script>
      

      ?? 手動使用Canvas壓縮

      如果不希望引入第三方庫,可以使用HTML5的Canvas API手動壓縮圖片。這種方法可控性高,但需要自己處理細節(jié)。

      <template>
        <input type="file" @change="handleImageUpload" accept="image/*" />
        <canvas ref="canvas" style="display: none;"></canvas>
      </template>
      
      <script setup>
      import { ref } from 'vue';
      
      const canvas = ref(null);
      
      const handleImageUpload = (event) => {
        const file = event.target.files[0];
        if (!file) return;
      
        const reader = new FileReader();
        reader.onload = (e) => {
          const img = new Image();
          img.onload = () => {
            const ctx = canvas.value.getContext('2d');
            
            // 設置最大寬高
            const maxWidth = 800;
            const maxHeight = 600;
            let { width, height } = img;
      
            // 等比例縮放計算
            if (width > height) {
              if (width > maxWidth) {
                height *= maxWidth / width;
                width = maxWidth;
              }
            } else {
              if (height > maxHeight) {
                width *= maxHeight / height;
                height = maxHeight;
              }
            }
      
            // 設置Canvas尺寸并繪制圖片
            canvas.value.width = width;
            canvas.value.height = height;
            ctx.drawImage(img, 0, 0, width, height);
      
            // 轉換為Blob(壓縮后的圖片)
            canvas.value.toBlob(
              (blob) => {
                const compressedFile = new File([blob], file.name, {
                  type: 'image/jpeg', // 輸出格式,可根據(jù)需要調整
                });
                console.log('壓縮成功', compressedFile);
              },
              'image/jpeg', // 輸出格式
              0.7 // 輸出質量(0-1)
            );
          };
          img.src = e.target.result;
        };
        reader.readAsDataURL(file);
      };
      </script>
      

      ?? 針對uni-app項目

      如果你在使用uni-app開發(fā)多端應用,可以使用其官方生態(tài)中的image-utils插件。

      安裝與使用

      1. 在項目的uni_modules目錄中安裝image-utils插件。
      2. 在項目中引入并使用:
      <script setup>
      import { compressImage } from '@/uni_modules/image-utils';
      
      // 選擇圖片并壓縮
      uni.chooseImage({
        count: 1,
        success: async (res) => {
          const filePath = res.tempFilePaths[0];
          try {
            const result = await compressImage(filePath, {
              quality: 0.8, // 壓縮質量
              maxWidth: 1200, // 最大寬度
              maxHeight: 800, // 最大高度
            });
            console.log('壓縮成功', result.tempFilePath);
            console.log(`原始大小: ${result.originalSize}KB, 壓縮后: ${result.size}KB`);
          } catch (error) {
            console.error('壓縮失敗:', error);
          }
        },
      });
      </script>
      

      ?? 實踐建議

      • 圖片格式選擇:JPEG格式通常更適合壓縮照片類圖片,而PNG格式更適合需要保留透明度的圖片。需要注意的是,compressorjs對PNG圖片的壓縮,如果通過quality參數(shù)可能效果不佳,有時需要通過調整尺寸(size)進行壓縮。
      • 合理設置參數(shù):壓縮質量(quality)通常在 0.60.8 之間能在體積和質量間取得較好平衡。同時設置maxWidthmaxHeight可以防止圖片尺寸過大。
      • 用戶體驗:壓縮是耗時操作,較大圖片尤其如此。建議提供加載指示器(如loading動畫)告知用戶操作進度。browser-image-compression等庫支持進度回調,可用于更新UI。
      • 兼容性處理:對于不支持某些API(如CanvasFileReader)的舊版瀏覽器,需要有回退方案(如直接上傳原圖)或友好提示。

      ?? 注意

      • 第三方庫和Canvas壓縮方法主要在瀏覽器環(huán)境運行。如果需要在Node.js服務器端壓縮圖片,可使用如sharp等庫。
      • 圖片壓縮是有損過程,過度壓縮會顯著降低圖片質量。務必根據(jù)實際場景測試并選擇合適的壓縮參數(shù)。

      希望這些方法能幫助你在Vue 3項目中有效實現(xiàn)圖片壓縮。如果你對特定庫的使用有更多疑問,或者想了解更具體的場景實現(xiàn),可以隨時提問。

      posted @ 2025-11-05 13:49  dirgo  閱讀(0)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 综合激情丁香久久狠狠| 精品久久久久国产免费| 国产人妻精品午夜福利免费| 少妇高潮激情一区二区三| 国产精品v片在线观看不卡| 午夜福利看片在线观看| 国产成人精品无人区一区| 亚洲三区在线观看内射后入| 亚洲日韩久热中文字幕| 国产欧美日韩亚洲一区二区三区| 亚洲人成网站77777在线观看| 久久精品亚洲国产综合色| 99在线精品国自产拍中文字幕| 囯产精品久久久久久久久久妞妞| 日韩中文字幕亚洲精品一| 狠狠色狠狠色综合日日不卡| 国产AV影片麻豆精品传媒| 狠狠综合久久av一区二| 在线看片免费不卡人成视频| 亚洲粉嫩av一区二区黑人| 69精品无人区国产一区| 成人性生交片无码免费看| 久久亚洲人成网站| 玩弄放荡人妻少妇系列| 精品久久久久久无码免费| 亚洲中文字幕av不卡无码| 亚洲欧美日韩综合久久久| 思茅市| 日韩本精品一区二区三区| 国产精品无码无需播放器| 无码av中文一区二区三区桃花岛| 亚洲精品中文字幕尤物综合| 在线天堂新版资源www在线下载 | 香蕉影院在线观看| 91人妻无码成人精品一区91| 日韩大片一区二区三区| 一区二区三区四区五区自拍| 亚洲色一色噜一噜噜噜| 康保县| 色翁荡息又大又硬又粗又视频图片| 久久久久香蕉国产线看观看伊|