1. 场景
在使用Angular+ionic开发混合App的过程中,有一个上传图片的需求。现在手机拍照像素都很高,所以图片都会有点大,随便一张图都7MB左右。而且用户在使用该App大多在工地、隧道等网络不是很好的地方。因此,为优化用户体验,我们可以在用户上传过程中将图片压缩后再上传以优化用户的体验。
2. 实现
2.1 压缩jpg、png等常见的图片类型
压缩图片的过程实际上就是根据原图缩小宽高后绘制一张新的图片的过程。
/**
* 该方法接收3个参数
* file: 上传的文件
* type: 文件类型
* quality: 压缩的系数 0-1之间的值
*/
compressImg(file,type, quality) {
// 创建FileReader 解析文件
const reader = new FildReader();
render.onload = (e) => {
// 绘制新的图片
const image = new Image();
image.src = e.target.result as string;
image.onload = () => {
// 通过canvas绘制
const canvas = document.createEelement('canvas');
const context = canvas.getContext('2d');
canvas.width = image.width * quality;
canvas.height = image.height * quality;
context.drawImage(image, 0, 0, canvas.width, canvas.height);