当前位置:首页 > JavaScript

js实现图片压缩

2026-03-01 05:08:29JavaScript

使用Canvas API压缩图片

通过Canvas的drawImagetoDataURL方法实现图片压缩。核心原理是将图片绘制到Canvas上,再转换为指定质量的Blob或Base64数据。

function compressImage(file, quality = 0.7, maxWidth = 800) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = (e) => {
      const img = new Image();
      img.onload = () => {
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');

        // 计算缩放比例
        const scale = maxWidth / img.width;
        canvas.width = maxWidth;
        canvas.height = img.height * scale;

        // 绘制到Canvas
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

        // 转换为Blob
        canvas.toBlob(
          (blob) => resolve(blob),
          'image/jpeg',
          quality
        );
      };
      img.src = e.target.result;
    };
    reader.readAsDataURL(file);
  });
}

使用第三方库实现压缩

对于更复杂的压缩需求,可以使用专门处理图片压缩的库:

  1. compressorjs - 提供更多压缩选项和更好的兼容性
    
    import Compressor from 'compressorjs';

new Compressor(file, { quality: 0.6, maxWidth: 1024, success(result) { // 压缩后的文件 }, error(err) { console.error(err.message); }, });


2. browser-image-compression - 支持Web Worker后台压缩
```javascript
import imageCompression from 'browser-image-compression';

const options = {
  maxSizeMB: 1,
  maxWidthOrHeight: 1920,
  useWebWorker: true
};

const compressedFile = await imageCompression(file, options);

压缩时注意事项

图片压缩需要考虑以下因素:

js实现图片压缩

  • 目标格式选择:JPEG适合照片,PNG适合带透明度的图片
  • 质量参数平衡:通常0.6-0.8在质量和文件大小间取得较好平衡
  • 分辨率控制:根据实际显示需求限制最大宽度/高度
  • 异步处理:大文件压缩应使用Web Worker避免阻塞UI

完整示例代码

async function handleImageUpload(event) {
  const file = event.target.files[0];
  if (!file) return;

  try {
    const compressedBlob = await compressImage(file);

    // 使用压缩后的文件
    const formData = new FormData();
    formData.append('image', compressedBlob, file.name);

    // 上传或进一步处理...
  } catch (error) {
    console.error('压缩失败:', error);
  }
}

document.getElementById('file-input').addEventListener('change', handleImageUpload);

标签: 图片js
分享给朋友:

相关文章

css图片按钮制作

css图片按钮制作

使用纯CSS创建图片按钮 通过CSS的background-image属性可以轻松将图片设置为按钮背景。关键点在于设置合适的尺寸、去除默认边框并添加交互状态: .image-btn { widt…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…