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

想要在前端项目中压缩图片,然后再上传到后端保存,就需要一个压缩工具的帮助,暂时有两个依赖库可以选择: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-vars
  mozJPEG = 'mozJPEG',
  // eslint-disable-next-line no-unused-vars
  avif = 'avif',
  // eslint-disable-next-line no-unused-vars
  webP = '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
}

 

相关推荐

  1. 前端】Vite项目图片动态引入

    2024-02-05 22:06:02       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-05 22:06:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-05 22:06:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-05 22:06:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-05 22:06:02       18 阅读

热门阅读

  1. P1022 [NOIP2000 普及组] 计算器的改良

    2024-02-05 22:06:02       35 阅读
  2. AtCoder Beginner Contest 339 B.Langton‘s Takahashi【模拟】

    2024-02-05 22:06:02       38 阅读
  3. C语言中递归算法的效率分析

    2024-02-05 22:06:02       30 阅读
  4. termux安装openssh+nginx

    2024-02-05 22:06:02       35 阅读
  5. python实例100第51例:学习使用按位与 & 。

    2024-02-05 22:06:02       28 阅读
  6. 6-5 E. DS树--二叉树高度

    2024-02-05 22:06:02       35 阅读
  7. 设计模式(结构型模式)外观模式

    2024-02-05 22:06:02       26 阅读