如何在像base64这样的webassembly中编码图像

How to encode image in webassembly like base64

有没有办法在 webassembly 代码中对图像进行编码?

因此,与其在使用 Wasm 绘制的 canvas 中加载图像,不如在代码中对图像进行编码。

类似于使用 base64 图像,但在编译的 wasm 代码中而不是 base64 中,我们可以在新选项卡中加载它,然后将其另存为图像。

也许可以做一些像逐像素绘图这样的事情。 但是其中一个限制就是下载速度不能变大。

所以为了让你的问题更清楚,你似乎想在 wasm 上使用图像文件,但不希望由于 wasm 二进制编码而影响二进制大小。

既然如此,为什么不将它们打包成一个单独的文件,然后传递给 wasm 呢? Emscripten 优惠 a virtual file system that supports pre-loading files.

假设您的图像文件是 your_image.png,通过向 emcc 添加 --preload-file 选项,您可以发送它们。作为 wasm 二进制文件之外的打包文件。例如:

$ emcc \
    your_source_file.cpp \
    --preload-file your_asset_dir/your_image.png \
    ...other emcc options...

将创建 .bin 文件,其中包含 your_image.png(以及其他文件,如果您添加更多),以及已编译的 .wasm.js 文件。这个 .bin 文件应该比在 C 上硬编码二进制文件更 space 高效。你的 wasm(准确地说,加载 wasm 模块的 JS 文件)将下载 .bin 文件在 运行 时间。

并且您可以像打开本地文件系统上的普通文件一样打开该文件:

// I think UNIX open() will also work.
FILE *file = fopen("your_image.png", "r");

有关此功能的更多详细信息,请转到 Emscripten 的 tutorial