【发布时间】:2015-08-12 18:18:51
【问题描述】:
如果你看这段代码,webp 的表现要比 png 和 jpg 好很多
<canvas id="canvas"></canvas>
<script>
var ctx = canvas.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(0, 0, 8, 8);
var webp = canvas.toDataURL("image/webp"); // Chrome only?
var png = canvas.toDataURL("image/png");
var jpg = canvas.toDataURL("image/jpeg");
console.log(webp.length, webp); // 263 byte
console.log(png.length, png); // 1918 byte
console.log(jpg.length, jpg); // 1938 byte
document.body.appendChild(new Image).src = webp;
document.body.appendChild(new Image).src = png;
document.body.appendChild(new Image).src = jpg;
</script>
我正在使用节点模块https://github.com/Automattic/node-canvas
不支持webp,但模拟canvas元素
我认为我需要在这个画布周围做一个包装器来做
wrapper(canvas).toDataURL('image/webp');
正如我在许多尝试中发现的那样,将 base64 png 图像从 png 转换为 webp 只是速度很差。
webp 将是通过 websocket 快速传输的理想大小。如果不支持 webp,那么我会回退到 png,用户体验会变慢。
原问题:
在 node.js 中,我需要一种将字符串从 base64 png 转换为 base64 webp 的方法。
我说字符串是因为我的应用程序的性质。如果我要保存这些特定图像然后转换它们(有一些 npm 模块可以转换图像“文件”),我的服务器将充满图像,因为这些图像对于每个用户来说都是临时的和动态的,每个用户在移动页面时会获得大约 100 张新图像。
在节点画布中 canvas.toDataURL('image/webp') 不支持仅图像/png
【问题讨论】: