uni-app H5 chooseImage 图片压缩转base64 压缩100KB 以内,使用canvas
时间: 2024-10-01 14:02:17 浏览: 41
UniApp 中的 `chooseImage` API 可以帮助你在H5环境中获取用户选择的图片,接着可以使用 HTML5 的 Canvas 对象对图片进行压缩,并将其转换为 Base64 格式。以下是一个简单的步骤描述:
1. 首先,通过 `uni.chooseImage` 获取用户选择的图片,得到文件路径或者本地URL。
```javascript
uni.chooseImage({
count: 1, // 选一张图片
sourceType: ['album', 'camera'], // 来源类型:相册、摄像头
success: function (res) {
var imgPath = res.tempFiles[0]; // 获取到图片的路径
}
});
```
2. 使用 `FileReader` 对象读取图片文件并绘制到 `Canvas` 上。
```javascript
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
let reader = new FileReader();
reader.readAsDataURL(imgPath);
reader.onload = function(e) {
let imgData = e.target.result;
canvas.width = canvas.height = Math.min(canvas.width, canvas.height); // 控制图片尺寸不超过canvas
ctx.drawImage(new Image(), 0, 0, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height);
// 将canvas内容转为Base64
let compressedImgData = canvas.toDataURL('image/jpeg', 0.8); // 0.8 是压缩质量,默认是1表示不压缩
if(compressedImgData.byteLength > 100 * 1024) { // 检查是否压缩过小
console.log('压缩后的数据过大,小于100KB');
} else {
// 这里处理压缩后的Base64字符串
}
};
```
在这个过程中,你可以通过调整 `drawImage` 中的质量参数来控制压缩程度,比如 `0.8` 表示将图像质量降低到 80%。如果压缩后的大小超过了100KB,需要进一步优化或者提示用户。
阅读全文