当前位置: 首页 > article >正文

前端实现图片压缩

前端实现图片压缩的主要方法有:

  1. 使用 HTML5 的 API
    利用 canvas 将图片绘制到画布上,然后通过 toDataURL 方法获取压缩后的图片数据。

  2. 使用第三方库
    借助 compressorjs、browser-image-compression 等开源库,快速实现高质量的图片压缩功能。

方法一:基于 的图片压缩

function compressImage(file, quality = 0.8) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = (e) => {
      const img = new Image();
      img.src = e.target.result;
      img.onload = () => {
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');

        // 设置画布宽高
        canvas.width = img.width;
        canvas.height = img.height;

        // 绘制图片到画布
        ctx.drawImage(img, 0, 0, img.width, img.height);

        // 获取压缩后的图片数据
        canvas.toBlob(
          (blob) => {
            resolve(blob);
          },
          'image/jpeg', // 输出格式
          quality // 压缩质量
        );
      };
      img.onerror = reject;
    };
    reader.onerror = reject;
    reader.readAsDataURL(file);
  });
}

方法二:使用 browser-image-compression

import imageCompression from 'browser-image-compression';

async function compressImage(file) {
  const options = {
    maxSizeMB: 1, // 压缩后的文件大小限制
    maxWidthOrHeight: 1920, // 最大宽高
    useWebWorker: true, // 开启 Web Worker 提升性能
  };

  try {
    const compressedFile = await imageCompression(file, options);
    return compressedFile;
  } catch (error) {
    console.error('压缩失败:', error);
  }
}

使用场景与注意事项

  • 图片质量与压缩比需要权衡。
  • 压缩算法的兼容性需要在不同浏览器中验证。
  • 对于较大的图片,建议采用 Web Worker 防止主线程阻塞。

http://www.kler.cn/a/447736.html

相关文章:

  • 微信小程序开发入门
  • ChatGPT生成接口文档的方法与实践
  • C++进阶-2-STL
  • python\shell\c++语法对比
  • BGP的六种状态分别是什么?
  • 嵌入式C语言,函数指针参数的用法详解!!!
  • C++进阶-1-单继承、多继承、虚继承
  • SpringBoot配置Swagger和MybatisPlus
  • memcached 与 redis 的区别?
  • 集成方案 | Docusign + 金蝶云,实现合同签署流程自动化!
  • Ubuntu22.04配置3D gaussian splatting
  • 概率论基础
  • postmam 请求报 Bad Request This combination of host and port requires TLS.解决办法
  • vue应用移动端访问缓慢问题
  • 前端如何将pdf等文件传入后端
  • CCF-GESP 等级考试 2023年6月认证C++四级真题解析
  • 目标检测文献阅读-Faster R-CNN:通过区域建议网络实现实时目标检测(12.16-12.22)
  • 【Rust 学习笔记】Rust 基础数据类型介绍——字符和字符串类型
  • 设计模式-创建型模式-简单工厂模式详解
  • Oracle中间件 SOA之 OSB 12C服务器环境搭建
  • 《开启微服务之旅:Spring Boot 从入门到实践》(三)
  • HTTP协议及安全防范
  • Unity 开发Apple Vision Pro物体识别追踪ObjectTracking
  • Numpy基本操作
  • OnlineMusic项目测试报告
  • 【Leetcode 每日一题】1387. 将整数按权重排序