欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

堪比tinify的圖片壓縮工具TinyPNG

liguoquan
2024年12月27日 12:44 本文熱度 240
:堪比tinify的圖片壓縮工具TinyPNG

?

堪比tinify的圖片壓縮工具TinyPNG

介紹

  • 基于tinypng的圖片壓縮工具,支持圖片壓縮功能。
  • 使用客戶端壓縮圖片,無需上傳到服務器,直接在客戶端進行壓縮。
  • 支持WebWork
  • npm:tinypng-lib
  • 在線體驗地址:tinypng.wcrane.cn/

使用方法

  • 安裝
shell
代碼解讀
復制代碼
npm install tinypng-lib
  • 基本使用
html
代碼解讀
復制代碼
<template>  <div id="app">    <input type="file" @input="uploadImg" />    <img :src="imgUrl" alt="">  </div> </template> <script> import TinyPNG from 'tinypng-lib' export default {  name: 'App',  components: {  },  data() {    return {      imgUrl: ''    }  },  methods: {    async uploadImg(e) {      const file = e.target.files[0];      try {        const res = await TinyPNG.compress(file, {})        console.log('res', res)        const url = URL.createObjectURL(res.blob)        const img = new Image()        this.imgUrl = url      } catch (error) {        console.log("error", error)      }    }  } } </script>

參數說明

參數說明默認值
minimumQuality最小質量35
quality期望壓縮質量(0-100)88
fileName壓縮后的文件名文件名稱
js
代碼解讀
復制代碼
/** * 壓縮圖片參數 */ interface CompressOptions {    minimumQuality?: number; // 最小質量    quality?: number; // 壓縮質量 0 - 100    fileName?: string; // 壓縮后的文件名, 默認為file.name }

返回值說明

js
代碼解讀
復制代碼
/** * 壓縮圖片結果 */ interface CompressResult {    success: boolean, // 是否成功    file: File, // 壓縮后的文件    originalSize: number, // 原始文件大小    compressedSize: number, // 壓縮后文件大小    rate: number, // 壓縮率(壓縮為原來的%)    output: ArrayBuffer, // 壓縮后的 ArrayBuffer    blob: Blob, // 壓縮后的 Blob    rateString: string, // 壓縮率字符串 }

WebWorker中使用

基本使用

  1. webpack項目中安裝worker-loader
shell
代碼解讀
復制代碼
npm install worker-loader
  1. webpack.config.js中配置
js
代碼解讀
復制代碼
module.exports = {  // ...  module: {    rules: [      {        test: /.worker.js$/,        use: { loader: 'worker-loader' },      },    ],  }, };
  1. 定義imageWorker.worker.js
js
代碼解讀
復制代碼
// imageWorker.worker.js import TinyPNG from 'tinypng-lib'; self.onmessage = async function (e) {    const {        image,        options    } = e.data;    try {        // 使用支持webWorker的方法        const result = await TinyPNG.compressWorkerImage(image, options);        self.postMessage(result);    } catch (error) {        self.postMessage({ error: error.message });    } };
  1. 在組件中使用
  • 監聽webworker的消息
  • 使用 TinyPNG.getImage 處理文件信息
  • 發送圖片信息給webworker進行壓縮
  • 接收webworker返回的壓縮結果
js
代碼解讀
復制代碼
<script> // Import the worker import ImageWorker from './imageWorker.worker.js'; // This is the bundled worker import { getSizeTrans } from '../utils'; import TinyPNG from 'tinypng-lib'; export default {  name: 'Base',  mounted() {    // Start the worker when the component is mounted    this.worker = new ImageWorker();    // Receive the message (compressed result) from the worker    this.worker.onmessage = (e) => {      this.compressing = false;      const result = e.data;      if (result.error) {        console.error("Compression failed:", result.error);      } else {        // 拿到壓縮結果        console.log(e);      }    };  },  methods: {    getSizeTrans,    async uploadImg(e) {      const file = e.file;      // 獲取圖片信息      const image = await TinyPNG.getImage(file);      // Send the file to the worker for compression      this.worker.postMessage({        image,        options: {          minimumQuality: 30,          quality: 85        }      });    }  },  beforeDestroy() {    // Terminate the worker when the component is destroyed    if (this.worker) {      this.worker.terminate();    }  } } </script>
  1. 說明:對于jpeg、jpg的圖片不支持使用WebWorker壓縮需要使用TinyPNG.compressJpegImage 進行壓縮
js
代碼解讀
復制代碼
import TinyPNG from 'tinypng-lib'; TinyPNG.compressJpegImage(file, options)

CompressWorker 使用

  • 封裝代碼
js
代碼解讀
復制代碼
import ImageWorker from './imageWorker.worker.js'; // 與前面imageWorker.worker.js一致 export class CompressWorker {    worker = null;    constructor() {        this.worker = new ImageWorker();    }    async compress(file, options) {        // 獲取圖片信息        const image = await TinyPNG.getImage(file);        return new Promise((resolve, reject) => {            // 監聽worker的消息            this.worker.onmessage = (e) => {                const result = e.data;                if (result.error && !result.success) {                    console.error("Compression failed:", result.error);                    reject(result.error);                } else {                    resolve(result);                }            };            // Send the file to the worker for compression            this.worker.postMessage({                image,                options            });        });    }    terminate() {        if (this.worker) {            this.worker.terminate();            this.worker = null;        }    } }
  • 使用

    • 實例化:CompressWorker只注冊一次就行,比如vue的mounted生命周期
    • 圖片壓縮
    • 頁面或者組件卸載的時候執行, 銷毀 CompressWorker 實例
js
代碼解讀
復制代碼
// 1. 只注冊一次就行,比如vue的mounted生命周期 compressWorker = new CompressWorker(); // 2. 監聽選擇的圖片,圖片壓縮 compressWorker.compress(file, {  minimumQuality: 30,  quality: 85 }).then((result) => {  // 壓縮結果  console.log(result); }) // 3. 頁面或者組件卸載的時候執行, 銷毀webworker if (compressWorker) {  compressWorker.terminate(); }

注意事項

  • 請確保已經安裝了tinypng-lib模塊

該文章在 2024/12/27 12:44:55 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved