简介:了解如何使用 Compressor.js 实现高效的前端图片压缩。本文涵盖 Compressor.js 的基本用法、核心配置项、图像裁剪与上传实战,适合 Web 开发者快速上手并应用于真实项目中
在现代 Web 开发中,图像处理是一个常见的需求。尤其是在用户上传图片的场景下,如头像上传、内容发布等,我们常常需要对图片进行压缩以减少体积并提升加载速度。Compressor.js 就是一款轻量而强大的 JavaScript 图片压缩库,它可以在浏览器端对图片进行高质量的压缩和裁剪操作。
本文将带你从零开始,逐步掌握 Compressor.js 的使用,并通过一个完整的示例展示其在实际项目中的应用。
Compressor.js 是一个基于 HTML5 Canvas 和 JavaScript 编写的客户端图片压缩工具。它支持多种配置选项,包括压缩质量、输出尺寸、旋转、缩放等功能,适用于现代浏览器。
你可以通过以下几种方式引入 Compressor.js:
方法1:使用 npm 安装(推荐用于模块化项目)
npm install compressorjs --save
然后在你的 JS 文件中导入:
import Compressor from 'compressorjs';
方法2:直接引入 CDN(适合传统网页)
<script src="https://cdn.jsdelivr.net/npm/compressorjs@1.1.1/dist/compressor.min.js"></script>
假设你有一个 <input type="file" id="file"> 元素,用户选择图片后,我们可以使用 Compressor.js 来压缩该图片。
<input type="file" id="file" accept="image/*">
<img id="preview" style="max-width: 100%; margin-top: 20px;" />
document.getElementById('file').addEventListener('change', function (e) {
const file = e.target.files[0];
if (!file) return;
new Compressor(file, {
quality: 0.6, // 压缩质量(0.1 ~ 1)
success(result) {
console.log('压缩后的文件大小:', result.size);
// 显示压缩后的图片预览
const reader = new FileReader();
reader.onload = function (event) {
document.getElementById('preview').src = event.target.result;
};
reader.readAsDataURL(result);
},
error(err) {
console.error('压缩失败:', err.message);
}
});
});
注意:success(result) 中的 result 是一个 Blob 类型的压缩后文件对象,可以直接上传服务器。
参数名 | 类型 | 默认值 | 描述 |
---|---|---|---|
quality | number | 0.8 | 压缩质量(仅对 jpeg/webp 生效) |
width | number | undefined | 设置输出宽度 |
height | number | undefined | 设置输出高度 |
rotate | number | undefined | 旋转角度(90/180/270) |
convertSize | number | 5000000 | 大于该值才进行压缩(单位字节) |
mimeType | string | undefined | 输出格式,如 'image/jpeg' |
strict | boolean | true | 是否严格限制宽高比 |
success | function | required | 成功回调函数 |
error | function | optional | 错误回调函数 |
结合 Cropper.js 可以实现图片裁剪后再压缩上传,是头像上传场景的经典组合。
示例流程:
function uploadImage(file) {
const formData = new FormData();
formData.append('avatar', file);
fetch('/api/upload', {
method: 'POST',
body: formData,
}).then(res => res.json())
.then(data => {
console.log('上传成功:', data);
})
.catch(err => {
console.error('上传失败:', err);
});
}
结合前面的压缩逻辑:
new Compressor(file, {
quality: 0.6,
success(result) {
uploadImage(result); // 上传压缩后的 Blob 文件
}
});
总结
Compressor.js 是前端图像压缩领域的优秀工具,尤其适合需要在浏览器端快速压缩图片并上传的场景。它的 API 简洁、功能丰富,且易于集成到各类项目中。
有遗漏或者不对的可以在我的公众号留言哦