前端vue/react项目压缩图片工具@yireen/squoosh-browser

news/2024/10/18 23:27:34/

想要在前端项目中压缩图片,然后再上传到后端保存,就需要一个压缩工具的帮助,暂时有两个依赖库可以选择:image-conversion和yireen/squoosh-browser,看了官方仓库地址和更新时间等详情,发现还是yireen/squoosh-browser最新一些,所以就选择了yireen/squoosh-browser。

@yireen/squoosh-browser地址:@yireen/squoosh-browser - npm

@yireen/squoosh-browsergithub地址:GitHub - myeveryheart/squoosh-browser: An image compression tool run in browser while @squoosh/lib can not.

image-conversion地址:image-conversion - npm 

安装

执行命令:

pnpm install  @yireen/squoosh-browser

使用

创建一个工具文件,然后添加下面内容:

import Compress from '@yireen/squoosh-browser'
import {defaultPreprocessorState,defaultProcessorState,encoderMap,EncoderState
} from '@yireen/squoosh-browser/dist/client/lazy-app/feature-meta'/*** 图片压缩编码器枚举*/
export enum CompressEncoderEnum {// eslint-disable-next-line no-unused-varsmozJPEG = 'mozJPEG',// eslint-disable-next-line no-unused-varsavif = 'avif',// eslint-disable-next-line no-unused-varswebP = 'webP'
}/*** 判断文件类型是否为图片格式* @param fileType*/
export const isImage = (fileType: string): boolean => {return /(png|jpg|jpeg|gif|webp|awebp|avif|svg\+xml|svg|x-icon|vnd.microsoft.icon)$/.test(fileType)
}/*** 判断是否需要压缩的图片格式* @param imageType*/
export const isNeedCompress = (imageType: string): boolean => {return /(png|jpg|jpeg|webp|avif)$/.test(imageType)
}/*** 压缩图片* @param file* @param encoder*/
export const compressImage = async (file: File, encoder: CompressEncoderEnum) => {if (isNeedCompress(file.type)) {const compress = new Compress(file, {encoderState: {type: encoder,options: encoderMap[encoder].meta.defaultOptions} as EncoderState,processorState: defaultProcessorState,preprocessorState: defaultPreprocessorState})return compress.process()}return file
}

 


http://www.ppmy.cn/news/1342425.html

相关文章

ES6-数组的解构赋值

一、数组的解构赋值的规律 - 只要等号两边的模式相同,左边的变量就会被赋予对应的值二、数组的解构赋值的例子讲解 1)简单的示例(完整的解构赋值) 示例 //基本的模式匹配 // a,b,c依次和1,2&#xff0c…

2024美赛C题完整解题教程及代码 网球运动的势头

2024 MCM Problem C: Momentum in Tennis (网球运动的势头) 注:在网球运动中,"势头"通常指的是比赛中因一系列事件(如连续得分)而形成的动力或趋势,这可能对比赛结果产生重要影响。球…

[Unity Sentis] Unity Sentis 详细步骤工作流程

文章目录 1. 导入模型文件支持的模型创建运行时模型导入错误 2. 为模型创建输入将数组转换为张量创建多个输入进行操作 3. 创建一个引擎来运行模型创建一个Worker后端类型 4. 运行模型5. 获取模型的输出获取张量输出多个输出打印输出 1. 导入模型文件 要导入 ONNX 模型文件&am…

云端录制直播流视频,上传云盘

前言 哪一天我心血来潮,想把我儿子学校的摄像头视频流录制下来,并保存到云盘上,这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干,当时花了一些时间开发了一个后端服务,通过数据库配置录制参数,…

第九章 通过 ODBC 连接 SQL 网关 - 特定于实现的 ODBC 连接选项

文章目录 第九章 通过 ODBC 连接 SQL 网关 - 特定于实现的 ODBC 连接选项特定于实现的 ODBC 连接选项Legacy Outer Join需要长数据长度支持 Unicode 流默认情况下不使用分隔标识符Use COALESCE复合行 ID 的转换 第九章 通过 ODBC 连接 SQL 网关 - 特定于实现的 ODBC 连接选项 …

mysql中kill命令的含义和用法

在MySQL中,KILL QUERY 和 KILL CONNECTION 是用来终止正在运行的进程的两个不同命令,它们对应的使用场景和影响范围有所不同。这两个命令后面都需要跟一个线程ID(也称为进程ID),这个ID指的是MySQL服务器上当前运行的一…

Unity | 资源热更(YooAsset AB)

目录 一、AssetBundle 1. 插件AssetBundle Browser 打AB包 (1)Unity(我用的版本是2020.3.8)导入AssetBundle Browser (2)设置Prefab (3)AssetBundleBrowser面板 2. 代码打AB包…

LeetCode 每日一题 2024/1/29-2024/2/4

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/29 514. 自由之路1/30 2808. 使循环数组所有元素相等的最少秒数1/31 2670. 找出不同元素数目差数组2/1 LCP 24. 数字游戏2/2 1686. 石子游戏 VI2/3 1690. 石子游戏 VII2/…