官方文档地址
https://fengyuanchen.github.io/compressorjs/
主要目录
dist/
├── compressor.js (UMD)
├── compressor.min.js (UMD, compressed)
├── compressor.common.js (CommonJS, default)
└── compressor.esm.js (ES Module)
使用
查看下载和使用,简要代码如下
<input type="file" id="file" accept="image/*">
new Compressor('这里传入文件对象fileObj', {
width: 1000,
quality: 0.8,
success: function (result) {
console.log('Output: ', result);
var sourceSize = toFixed2(fileObj.size / 1024),
resultSize = toFixed2(result.size / 1024),
scale = parseInt(100 - (resultSize / sourceSize * 100));
console.log('源文件:' + sourceSize + 'KB' + '压缩后传输大小:' + resultSize + 'KB (省' + scale + '%)');
},
error: function (err) {
// 提示错误
console.log(err.message);
}
})
官方参数
选项
您可以使用“new Compressor(file, options)”设置压缩器选项。
如果你想改变全局默认选项,你可以使用 Compressor.setDefaults(options)
。
严格的
- 类型:
布尔
- 默认值:
true
指示当压缩图像的大小大于原始图像时,是否输出原始图像而不是压缩图像,但以下情况除外:
- 设置了
mimeType
选项,其值与图像的 mime 类型不同。 - 设置了
width
选项,其值大于图像的自然宽度。 - 设置了
height
选项,其值大于图像的自然高度。 - 设置了
minWidth
选项,其值大于图像的自然宽度。 - 设置了
minHeight
选项,其值大于图像的自然高度。 - 设置了
maxWidth
选项,其值小于图像的自然宽度。 - 设置了
maxHeight
选项,其值小于图像的自然高度。
检查方向
- 类型:
布尔
- 默认值:
true
指示是否读取图像的 Exif Orientation 值(仅限 JPEG 图像),然后使用该值自动旋转或翻转图像。
笔记:
- 不要一直相信这一点,因为某些 JPEG 图像具有不正确(非标准)的方向值。
- 如果目标图像的大小太大(例如,大于 10 MB),您应该禁用此选项以避免内存不足崩溃。
- 压缩后图片的Exif信息将被删除,因此如果您需要Exif信息,您可能还需要上传原始图片。
最大宽度
- 类型:
数字
- 默认值:
Infinity
输出图像的最大宽度。该值应大于“0”。
避免获得空白输出图像,您可能需要将maxWidth
和maxHeight
选项设置为有限的数字,因为 [画布元素的大小限制](https://stackoverflow.com/questions/6081483/画布元素的最大尺寸),建议使用4096
或更少。
最大高度
- 类型:
数字
- 默认值:
Infinity
输出图像的最大高度。该值应大于“0”。
最小宽度
- 类型:
数字
- 默认值:
0
输出图像的最小宽度。该值应大于“0”且不应大于“maxWidth”。
最小高度
- 类型:
数字
- 默认值:
0
输出图像的最小高度。该值应大于“0”且不应大于“maxHeight”。
宽度
- 类型:
数字
- 默认值:
未定义
输出图像的宽度。如果未指定,将使用原始图像的自然宽度,或者如果设置了 height
选项,则宽度将根据自然纵横比自动计算。
高度
- 类型:
数字
- 默认值:
未定义
输出图像的高度。如果未指定,将使用原始图像的自然高度,或者如果设置了 width
选项,则高度将根据自然纵横比自动计算。
调整大小
- 类型:
字符串
- 默认值:
"none"
- 选项:
"none"
、"contain"
和"cover"
。
设置图像的大小应如何调整为由 width
和 height
选项指定的容器。
注意: 此选项仅在同时指定了 width
和 height
选项时可用。
质量
- 类型:
数字
- 默认值:
0.8
输出图像的质量。它必须是介于“0”和“1”之间的数字。如果此参数是其他任何参数,则默认值 0.92
和 0.80
分别用于 image/jpeg
和 image/webp
。其他参数被忽略。小心使用“1”,因为它可能会使输出图像的尺寸变大。
注意: 此选项仅适用于image/jpeg
和image/webp
图像。
查看 canvas.toBlob 了解更多详情。
例子:
质量 | 输入尺寸 | 输出尺寸 | 压缩比 | 说明 |
---|---|---|---|---|
0 | 2.12 MB | 114.61 KB | 94.72% | - |
0.2 | 2.12 MB | 349.57 KB | 83.90% | - |
0.4 | 2.12 MB | 517.10 KB | 76.18% | - |
0.6 | 2.12 MB | 694.99 KB | 67.99% | 推荐 |
0.8 | 2.12 MB | 1.14 MB | 46.41% | 推荐 |
1 | 2.12 MB | 2.12 MB | 0% | 不推荐 |
南 | 2.12 MB | 2.01 MB | 5.02% | - |
mimeType
- 类型:
字符串
- 默认值:
'auto'
输出图像的 MIME 类型。默认情况下,将使用源图像文件的原始 mime 类型。
转换类型
- 类型:
Array
或string
(多个类型应以逗号分隔) - 默认值:
['image/png']
例子:
['图像/png','图像/webp']
'图像/png,图像/webp'
文件类型包含在此列表中且文件大小超过 convertSize
值的文件将被转换为 JPEG。
转换大小
- 类型:
数字
- 默认值:
5000000
(5 MB)
文件类型包含在 convertTypes
列表中且文件大小超过此的文件值将被转换为 JPEG。要禁用此功能,只需将值设置为“Infinity”。
例子:
转换大小 | 输入尺寸(类型) | 输出尺寸(类型) | 压缩比 |
---|---|---|---|
5 MB | 1.87 MB (PNG) | 1.87 MB (PNG) | 0% |
5 MB | 5.66 MB (PNG) | 450.24 KB (JPEG) | 92.23% |
5 MB | 9.74 MB (PNG) | 883.89 KB (JPEG) | 91.14% |
beforeDraw(上下文,画布)
- 类型:
函数
- 默认值:
null
参数:
context
:画布的 2d 渲染上下文。canvas
:用于压缩的画布。
在将图像绘制到画布进行压缩之前要执行的钩子函数。
new Compressor(file, {
beforeDraw(context, canvas) {
context.fillStyle = '#fff';
context.fillRect(0, 0, canvas.width, canvas.height);
context.filter = 'grayscale(100%)';
},
});
绘制(上下文,画布)
- 类型:
函数
- 默认值:
null
参数:
context
:画布的 2d 渲染上下文。canvas
:用于压缩的画布。
将图像绘制到画布中进行压缩后要执行的钩子函数。
new Compressor(file, {
drew(context, canvas) {
context.fillStyle = '#fff';
context.font = '2rem serif';
context.fillText('watermark', 20, canvas.height - 20);
},
});
成功(结果)
- 类型:
函数
- 默认值:
null
参数:
result
:压缩图像(File
(只读)或Blob
对象)。
成功压缩图像时执行的钩子函数。
错误(错误)
- 类型:
函数
- 默认值:
null
参数:
err
:压缩错误(一个Error
对象)。
当无法压缩图像时执行钩子函数。