canvas.todataurl压缩图片
时间: 2025-07-05 22:01:09 浏览: 8
### 使用 HTML5 Canvas `toDataURL` 方法压缩图像
#### 图像压缩原理
通过调整图像质量和尺寸可以有效减少文件大小。对于 JPEG 类型的图片,可以通过设置编码选项中的质量参数来控制压缩程度;而对于 PNG 文件,默认情况下不会应用有损压缩,这可能导致转换后的文件体积反而增大。
#### 质量参数的影响
当调用 `canvas.toDataURL()` 函数并指定 `"image/jpeg"` 作为 MIME 类型时,可传递一个介于 0 到 1 之间的小数作为第二参数,该值决定了输出JPEG图像的质量[^3]。较低的质量数值会生成更小但视觉上可能稍差一些的结果。
#### 实际操作建议
为了获得最佳效果,在实际项目中应该考虑先缩小原始图像的比例再进行保存,而不是单纯依赖降低画质来进行压缩。这样可以在保持较好清晰度的同时显著减小最终得到的数据URL所代表的二进制数据长度。
#### 示例代码展示
下面是一个简单的例子展示了如何利用Canvas API 来压缩上传的一张照片:
```javascript
function compressImage(fileInput) {
const file = fileInput.files[0];
if (!file || !/^image\/(jpeg|png)$/.test(file.type)) return;
let img = new Image();
let canvas = document.createElement('CANVAS');
let ctx = canvas.getContext('2d');
img.onload = function () {
// 设置最大宽度和高度 (可以根据需求修改)
let maxWidthOrHeight = 800;
let scaleRatio = Math.min(maxWidthOrHeight / this.width, maxWidthOrHeight / this.height);
let width = this.width * scaleRatio;
let height = this.height * scaleRatio;
canvas.width = width;
canvas.height = height;
ctx.drawImage(img, 0, 0, width, height);
// 将 canvas 上的内容转成 base64 编码字符串,并指定为 jpeg 格式以及适当的质量因子
let compressedDataUrl = canvas.toDataURL('image/jpeg', 0.7);
console.log(compressedDataUrl);
};
img.src = URL.createObjectURL(file);
}
```
此函数接收一个 `<input type="file">` 元素作为输入,读取其中选中的图片文件,并将其绘制在一个隐藏的 Canvas 对象之上。接着按照设定的最大宽高比例重新计算合适的尺寸,最后以高质量等级导出一张经过缩放处理过的JPEG格式图片。
阅读全文
相关推荐


















