请教 data:image 问题,固定宽高纯透明图像,为什么 length 差两三倍?

42 天前
 nowheretoseek
我需要一些固定宽高的透明图像,在 chrome 的 console 中运行 js 代码生成,核心代码如下:

```js
const canvas_tmp = document.createElement("canvas");
canvas_tmp.width = width;
canvas_tmp.height = height;
const base64 = canvas_tmp.toDataURL();
console.log(base64);
```

生成的 base64 长度大约 400:
```
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPkAAAAgCAYAAADQft53AAAAAXNSR0IArs4c6QAAANpJREFUeF7t0wERAAAIAjHpX9oef7MBQ3aOAIG0wNLphCNA4IzcExCICxh5vGDxCBi5HyAQFzDyeMHiETByP0AgLmDk8YLFI2DkfoBAXMDI4wWLR8DI/QCBuICRxwsWj4CR+wECcQEjjxcsHgEj9wME4gJGHi9YPAJG7gcIxAWMPF6weASM3A8QiAsYebxg8QgYuR8gEBcw8njB4hEwcj9AIC5g5PGCxSNg5H6AQFzAyOMFi0fAyP0AgbiAkccLFo+AkfsBAnEBI48XLB4BI/cDBOICRh4vWDwCD4VoACGTmyVVAAAAAElFTkSuQmCC
```

可是在一个在线 sprites 工具[Responsive CSS Sprite Generator]( https://responsive-css.spritegen.com/)生成的长度只有 170 左右:

```
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAikAAABLAQMAAACP/oUlAAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABxJREFUeNrtwQENAAAAwqD3T20ON6AAAAAAAA4MFM0AAWaWeL4AAAAASUVORK5CYII=
```

都是纯透明的占位图像,没其余元素,怎么会差这么多?怎么生成这种体积小的?
661 次点击
所在节点    JavaScript
1 条回复
nowheretoseek
42 天前
保存下来两张图像比较了下,大致明白了,canvas 生成的图像默认是 32bit ,在线工具生成的是 1bit 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1030835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX