背景

:::info 图片太大,浏览器下载和渲染费劲,想了下,没必要显示这么大的图片,用压缩后的图片显示,效果差不多,性能却差很多 :::

一、压缩思路

涉及到 JS 的图片压缩,我的想法是需要用到 Canvas 的绘图能力,通过调整图片的分辨率或者绘图质量来达到图片压缩的效果,实现思路如下:

  • 获取上传 Input 中的图片对象 File
  • 将图片转换成 base64 格式
  • base64 编码的图片通过 Canvas 转换压缩,这里会用到的 Canvas 的 drawImage 以及 toDataURL 这两个 Api,一个调节图片的分辨率的,一个是调节图片压缩质量并且输出的,后续会有详细介绍
  • 转换后的图片生成对应的新图片,然后输出

二、优缺点介绍

不过 Canvas 压缩的方式也有着自己的优缺点:

  • 优点:实现简单,参数可以配置化,自定义图片的尺寸,指定区域裁剪等等。
  • 缺点:只有 jpeg 、webp 支持原图尺寸下图片质量的调整来达到压缩图片的效果,其他图片格式,仅能通过调节尺寸来实现

    四、代码实现