Как кодировать изображение в веб-сборке, как base64 - PullRequest
0 голосов
/ 21 декабря 2018

Есть ли способ кодировать изображения внутри кода веб-сборки?

Таким образом, вместо загрузки изображения внутри холста, нарисованного с помощью Wasm, но для кодирования изображения внутри кода.

Что-тоаналогично использованию изображений base64, но затем в скомпилированном коде wasm вместо base64, где мы можем просто загрузить его в новую вкладку и затем сохранить его как изображение.

Возможно, сделать что-то вроде рисования попиксельно.Однако одно из ограничений заключается в том, что он не может быть слишком большим по скорости загрузки.

1 Ответ

0 голосов
/ 22 декабря 2018

Итак, чтобы прояснить ваш вопрос, кажется, что вы хотите использовать файлы изображений в wasm, но не хотите, чтобы размер двоичного файла был связан с двоичным кодированием wasm.

В таком случае, почемуВы упаковываете их как отдельный файл и затем передаете его в wasm?Emscripten предлагает виртуальную файловую систему , которая поддерживает предварительную загрузку файлов .

Предположим, ваш файл изображения your_image.png, добавив --preload-file возможность emcc вы можете отправить их.Как упакованный файл вне двоичного файла 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. Ваш wasm (точнее, файл JS, который загружает модуль wasm) загрузит файл .bin во время выполнения.

И вы можете открыть файл, как обычный файл в локальной файловой системе:

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

Для получения более подробной информации об этой функции перейдите к учебнику Emscripten .

...