使用 BMP 格式图片替代 canvas.toDataURL 能否提升前端页面加载速度?
- 内容介绍
- 文章标签
- 相关推荐
本文共计596个文字,预计阅读时间需要3分钟。
如果canvas导出的图片只在本地上使用,无需使用toDataURL方法,可以直接在原始数据前加上+BMP文件头即可使用。前端开发中,有时需要将canvas的内容导出为图片文件,例如供CSS使用,通常会这样做:
canvas 导出的图片如果只在本地使用,无需使用 toDataURL 方法,直接在原始数据前加上 BMP 文件头即可使用。前端开发中有时需要将 canvas 的内容导出成图片文件,例如供 CSS 使用,通常会使用 canvas.toDataURL,兼容性好并且简单。
不过 canvas.toDataURL 显然是非常低效的:首先要将图像编码成 PNG 格式,然后再编码成 Base64,使用时又要解码 Base64 和 PNG,一来一往浪费大量开销,并且超长的 URL 也不美观。当然,使用 canvas.toBlob 倒是可以避免 Base64 转换和超长的 URL,但 PNG 转换仍不可避免,而这是最耗性能的。
既然图片只在本地使用,压缩显然毫无必要,为什么不使用更简单的 BMP 格式?虽然 canvas 并不支持导出 BMP 格式,但主流浏览器都能显示 BMP 图片,而且 BMP 本身也支持透明通道,因此完全可以代替 PNG。
BMP 格式非常简单,只需在像素数据前加个文件头就可以。头结构可参考 en.wikipedia.org/wiki/BMP_file_format#Example_2
其中有些字段是可选的,不用设置。
本文共计596个文字,预计阅读时间需要3分钟。
如果canvas导出的图片只在本地上使用,无需使用toDataURL方法,可以直接在原始数据前加上+BMP文件头即可使用。前端开发中,有时需要将canvas的内容导出为图片文件,例如供CSS使用,通常会这样做:
canvas 导出的图片如果只在本地使用,无需使用 toDataURL 方法,直接在原始数据前加上 BMP 文件头即可使用。前端开发中有时需要将 canvas 的内容导出成图片文件,例如供 CSS 使用,通常会使用 canvas.toDataURL,兼容性好并且简单。
不过 canvas.toDataURL 显然是非常低效的:首先要将图像编码成 PNG 格式,然后再编码成 Base64,使用时又要解码 Base64 和 PNG,一来一往浪费大量开销,并且超长的 URL 也不美观。当然,使用 canvas.toBlob 倒是可以避免 Base64 转换和超长的 URL,但 PNG 转换仍不可避免,而这是最耗性能的。
既然图片只在本地使用,压缩显然毫无必要,为什么不使用更简单的 BMP 格式?虽然 canvas 并不支持导出 BMP 格式,但主流浏览器都能显示 BMP 图片,而且 BMP 本身也支持透明通道,因此完全可以代替 PNG。
BMP 格式非常简单,只需在像素数据前加个文件头就可以。头结构可参考 en.wikipedia.org/wiki/BMP_file_format#Example_2
其中有些字段是可选的,不用设置。

