背景
:::info 图片太大,浏览器下载和渲染费劲,想了下,没必要显示这么大的图片,用压缩后的图片显示,效果差不多,性能却差很多 :::
一、压缩思路
涉及到 JS 的图片压缩,我的想法是需要用到 Canvas 的绘图能力,通过调整图片的分辨率或者绘图质量来达到图片压缩的效果,实现思路如下:
- 获取上传 Input 中的图片对象 File
- 将图片转换成 base64 格式
- base64 编码的图片通过 Canvas 转换压缩,这里会用到的 Canvas 的 drawImage 以及 toDataURL 这两个 Api,一个调节图片的分辨率的,一个是调节图片压缩质量并且输出的,后续会有详细介绍
- 转换后的图片生成对应的新图片,然后输出
二、优缺点介绍
不过 Canvas 压缩的方式也有着自己的优缺点: