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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы запутались между глубина цвета и форматом пикселей, и я признаю, что это сбивает с толку, потому что эта номенклатура Nbits используется повсюду, имея совершенно разные значения.
Например, то, что мы называем PNG-24, на самом деле составляет 8 бит * 3 канала (RGB), а PNG-32 - 8 бит * 4 (RGBA).
Но, проще говоря, формат JPEG не поддерживает индексированные цвета, он всегда (по крайней мере) * TrueColor: 3 канала * 8 бит => ~ 16,77 миллиона цветов. *since v9 it actually supports up to 12 bits per channel
То, что вы хотите сделать (один 8-битный канал => 256 цветов), невозможно, потому что сам формат JPEG не поддерживает его.
Обратите внимание, что из-за того, как работает JPEG (объединение визуально похожих цветов), в любом случае не имеет смысла сохранять изображение с 256 цветами в JPEG. Алгоритм JPEG создаст обратно новые цвета, которых не было в исходном 256-битном растровом изображении, и вы вполне можете получить файл большего размера, чем его растровый эквивалент.
Так что, если вам действительно нужно 8-битное изображение с одним каналом (256 цветов), посмотрите на форматы, которые поддерживают Индексированные цвета.
PNG является одним из них, но на самом деле холст вам здесь не поможет, так как Canvas API поддерживает только PNG-32 (8 бит на канал RGBA) .
GIF - это еще один, но я думаю, что только Safari поддерживает экспорт в GIF из элемента холста ...
@PatriciaNascimento еще раз, сам формат jpeg не поддерживает 8-битный цветной один канал. Он старый, но параметр форумы.adobe.com/thread/376358, который у вас есть в PS, применяется только к изображению, которое у вас есть в ps (psd). После преобразования обратно в jpeg снова будет 24 truecolor.
Возможно, я путаю концепции, но, глядя на пример видео, можно создать JPEG с 8-битной глубиной. ссылка Я попытался воспроизвести шаги, упомянутые в видео, и окончательное изображение было, как и ожидалось, в формате JPEG с глубиной 8 бит (одноканальный). Теперь я пытаюсь сделать то же самое, но с использованием Javscript.
Нет, это видео-шоу должно перейти от (возможно, TIFF) 16 бит на канал до 8 бит на канал JPEG. Но есть еще 3 канала по 8 бит. Просто посмотрите, попробуйте сделать обратное, установите его на 16 бит на канал. Вы увидите, что PS не позволит вам сохранить его в формате JPEG, если вы не установите флажок «Сохранить как копию». Теперь проверьте сохраненный файл => сообщается как 8 бит.
Хм ... Теперь я вижу, что в первом комментарии вы говорили об изображениях в оттенках серого? Это правда? В этом случае, может быть, действительно возможен единственный канал ... Но видео определенно этого не показывает.
Да, это возможно с этими свойствами, но у меня проблемы с преобразованием в JPEG и сохранением битовой глубины.
[! [введите здесь описание изображения] [1]] [1] [1]: i.stack.imgur.com/Ja2zh.jpg Сохраненный файл имел эти свойства. Это серое изображение в формате JPEG.
Спасибо за ваш ответ. Из проведенного мной исследования я видел несколько примеров с использованием программ для проектирования, где можно создать файл JPEG с 8-битной глубиной. Например, если вы используете Photoshop, вы можете сохранить файл с 8-битной глубиной (одноканальный цвет). Мои требования к проекту - установить изображение в формате JPEG, оттенки серого с 256 цветами (глубина 8 бит). На данный момент я уже создал растровое изображение с одним цветовым каналом, но мне нужно преобразовать его в JPEG без потери битовой глубины, и я хотел бы сделать это на стороне клиента. Кто-нибудь может мне помочь?