Я думаю, вы запутались между глубиной цвета и форматом пикселей, и я признаю, что это сбивает с толку, потому что эта номенклатура Nbits используется повсеместно, имея совершенно разные значения.
Например, то, что мы называем PNG-24, на самом деле составляет 8 бит * 3 канала (RGB), а PNG-32 - 8 бит * 4 (RGBA).
Но, проще говоря, формат JPEG не поддерживает индексированные цвета, он всегда (как минимум) * TrueColor: 3 канала * 8 бит => ~ 16,77 миллиона цветов.
*, начиная с версии 9, фактически поддерживает до 12 бит на канал
То, что вы хотите сделать (один 8-битный канал => 256 цветов), невозможно, потому что сам формат JPEG не поддерживает его.
Обратите внимание, что из-за того, как работает JPEG (объединяя визуально похожие цвета), в любом случае не имеет смысла сохранять изображение в 256 цветов в JPEG. Алгоритм JPEG создаст новые цвета, которых не было в вашем исходном 256-битном растре, и вы вполне могли бы получить файл большего размера, чем его растровый эквивалент.
Итак, если вам действительно нужно 8-битное изображение с одним каналом (256 цветов), посмотрите на форматы, которые поддерживают Индексированные цвета .
PNG является одним из них, но действительно Canvas вам здесь не поможет, поскольку Canvas API поддерживает только PNG-32 (8 бит на канал RGBA).
GIF другой, но я думаю, что только Safari поддерживает экспорт в GIF из элемента canvas ...