У вас уже будут готовые бинарные данные. Например, здесь посмотрите пример
Grayscaling and inverting colors. А вообще, вроде бы речь была о том, что изображение уже в градациях серого после ПО, тогда и canvas не нужен.
А далее изучать описание формата, и упаковать в бинарник заголовок файла, который и описывает формат.
Если покопаться, то браузеры могут кое что, например тут пример записи в файл
Save toBlob to disk, лиса записывает в файл PNG конвертируемый в BMP. Все бы хорошо, но почитайте о поддержке, а ведь в рамках веб нужна кроссбраузерность. И у каждого из них будет свое, если только оно есть.
Там же найдете описание и
Uint8ClampedArray, можно и
ArrayBuffer использовать.
Так что "безопасно", это самому ручками, изучайте формат, пакуйте, сохраняйте.