当前位置:首页 > 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动画可以为图片添加各种动态效果,提升网页的视觉吸引力。以下是几种常见的CSS动画实现方式: 关键帧动画(@keyframes) 通过定义关键帧来控制动画的各个阶段…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…