狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

堪比tinify的圖片壓縮工具TinyPNG

liguoquan
2024年12月27日 12:44 本文熱度 1043
:堪比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