Конвертировать BMP в JPEG с использованием JavaScript - PullRequest
0 голосов
/ 17 сентября 2018

Мне уже удается вручную создать растровое изображение загруженного изображения, манипулируя цветовыми каналами для получения 8-битного изображения.Теперь мне нужно преобразовать растровое изображение в jpeg, но мне нужно поддерживать битовую глубину (8-канальная глубина одноканального). Я не могу использовать Canvas, поскольку, когда преобразование выполнено, результирующий файл имеет глубину 24 бита.Кто-нибудь знает, возможно ли использовать JavaScript для этого преобразования, чтобы я мог выполнять все манипуляции с изображениями на стороне клиента?

1 Ответ

0 голосов
/ 18 сентября 2018

Я думаю, вы запутались между глубиной цвета и форматом пикселей, и я признаю, что это сбивает с толку, потому что эта номенклатура 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 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...