前端图片压缩 js-image-compressor

前言

通常我们上传图片尤其是用于web/移动端展示,需要考虑到图片的尺寸大小,前端可以使用一些工具对于较大图片进行压缩,尽量控制图片大小在200kb内,这样移动端在展示图片时较快加载,避免出现图片加载白屏问题。

对于这类问题,处理的思路有以下几种🤔:

  1. 上传图片时前端先进行图片压缩,压缩后传给Server或上传CDN,移动端直接拿到图片不处理就可以展示。
  2. 上传图片时前端不处理直接传给Server,由Server处理,移动端展示。
  3. 上传图片时前端和Server都不处理,移动端展示的时候先对图片预处理再展示。

首先第3种不推荐,在展示前进行压缩,除了某些业务场景需要保持原图质和灵活外可以用第3种;大部分情况下推荐第1种,在上传前由前端进行图片压缩再传给后端,这样可以节省上传时节省服务器存储空间减少网络负担

前端图片压缩

js-image-compressor介绍

js-image-compressor 是一个 JavaScript 库,它允许你在客户端(浏览器)压缩图片。这对于上传图片到服务器时减少带宽使用或优化存储大小非常有用。

git地址:github.com/wuwhs/js-im...

使用方式

  1. 安装
bash 复制代码
npm install js-image-compressor # 或 yarn add js-image-compressor
  1. 使用
js 复制代码
import ImageCompressor from 'js-image-compressor';

function imageCompress(file: any) {
  const size = file.size / 1024
    return new Promise((resolve, reject) => {
    const options = {
      file: file,
      quality: 0.8, // 图片质量
      mimeType: 'image/jpeg',
      maxWidth: file.height,
      maxHeight: file.width,
      minWidth: 10, // 指定压缩图片最小宽度
      width: 1080, // 指定压缩图片宽度
      convertSize: Infinity,
      loose: true,
      redressOrientation: true,
      success: (result) => {
        resolve(result)
      },
      error: (msg) => {
        reject(msg)
      },
    }
    new ImageCompressor(options)
  })
 }
  1. 对图片大小进行分层处理保证原图20M内的图片压缩后都控制在200kb内
js 复制代码
 let quality = 1
  if (size < 200) {
    return file
  }
  if (size > 200 && size <= 512) {
    quality = 0.9
  } else if (size > 512 && size <= 1024) {
    quality = 0.8
  } else if (size > 1024 && size <= 2048) {
    quality = 0.85
  } else if (size > 2048 && size <= 10240) {
    quality = 0.8
  } else if (size > 10240 && size <= 20480) {
    quality = 0.75
  } 

总结

js-image-compressor 压缩图片就是改变图片的quality或者调整size(width、height);

但是注意对于一些图片需要分情况处理,比如对于size较小的图如果固定width后可能会增大;

最后,处理图片需要注意保证图片清晰度的情况下去压缩😁。

相关推荐
2603_955279701 分钟前
通过 brew upgrade cmake 升级到最新版本
前端
FREEDOM_X14 分钟前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
WWBQU36 分钟前
前端day06
前端
岁月宁静42 分钟前
DeepSeek Harness 团队 招聘 :JD反推:新手如何系统掌握AI Agent开发技术?
前端·人工智能·后端
小则又沐风a1 小时前
深入理解文件系统(二)
java·服务器·前端
sztomarch1 小时前
Disable-Download-Chrome-AI-Mode
前端·chrome
禅思院1 小时前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【三】
前端·架构·前端框架
DianSan_ERP10 小时前
电商架构演进:如何在高并发场景下实现多平台API的标准化履约?
运维·前端·网络·安全·架构·自动化
碎_浪13 小时前
给键盘党的英语记忆工具:我做了一款「打字背单词」桌面应用
前端·程序员·ai编程
阿成学长_Cain14 小时前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库