Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сохранение Canvas в grayscale 8bit jpeg или png (https://javascript.ru/forum/misc/69017-sokhranenie-canvas-v-grayscale-8bit-jpeg-ili-png.html)

laimas 25.05.2017 17:12

Цитата:

Сообщение от Taifune
Что даст мне эта операция не могу осознать.

То что canvas дает на выходе 32-ное изображение и всякие инсинуации "вот тут другой профессор говорил что канвас не может содержать индексированный цвет" пора прекратить. :)

Что и как вы там делаете, это можно опустить. Пусть вы получаете изображение после canvas, если в нем его обрезаете и т.п. Далее конвертируете его в индексированную палитру. А запись в файл, это уже согласно формата PNG в котором нужно определить параметры - палитру, указать количество цвета и т.п.

laimas 25.05.2017 17:14

Цитата:

Сообщение от Taifune
Фотографии для программы которая печатает пластиковые карты. с фотографией и подписью.

И зачем же JS напрягать, если это вроде бы как прикладное приложение, а не веб?

Taifune 25.05.2017 17:25

Цитата:

Сообщение от laimas (Сообщение 453420)
И зачем же JS напрягать, если это вроде бы как прикладное приложение, а не веб?

Опять эти вопросы "зачем ?". Так и хочется ответить затем. Вообщем это все будет интегрировано в веб-интерфейс.


Цитата:

Сообщение от laimas (Сообщение 453419)
Далее конвертируете его в индексированную палитру. А запись в файл, это уже согласно формата PNG в котором нужно определить параметры - палитру, указать количество цвета и т.п.

А как это сделать?? Что для этого нужно.. Вы говорите об этом как о чем то самом разумеющимся. Как сконвертировать то ? Начнем с того что это мое первое приложение на JS и я до этого с ним вообще не работал. Да и с изображениями на таком уровне я никогда не работал. Я не представляю как здесь можно это реализовать. И в файл как вывести. Вот товарищ подсказал про image/octet-stream. На досуге почитаю разберусь с этим. Печально что нет готовых решений.

И кстати не надо вырывать из контекста

Цитата:

Сообщение от Taifune (Сообщение 453400)
Кстати вот тут другой профессор говорил что канвас не может содержать индексированный цвет, но с другой стороны мне и ненужно его выводить перед сохранением на просмотр. Может есть возможность использовать обычный массив для индексации и перевода в 8 бит?

Я в этой фразе наоборот соглашаюсь с тем что канвас не может хранить индекированную палитру, а не наоборот что хочу ее туда запихать. Я говорю о массиве без вывода на страницу. В массиве то мы можем пересобрать файл как нам надо?

laimas 25.05.2017 17:46

Цитата:

Сообщение от Taifune
Вот товарищ подсказал про image/octet-stream

И что, вы думаете эта операция автоматом догадается сохранить ваш 32 битник в индексированной палитре? Счас. :)

Цитата:

Сообщение от Taifune
Как сконвертировать то ?

Я вам давал ссылку, но там сохранение в GIF и с использованием уже готовой библиотеки, если нечто готовое для PNG-8 я не знаю.

Самому писать, так это согласно формата. Поэтому и не понятно нахрена вам эти заморочки. Если все-таки предполагается веб, а значит и хранение результата на сервере, то разумнее всего отдать это серверу на растерзание. К примеру, если серверный язык, это РНР, то вашу проблему тремя строками кода решает GD.

Если же на клиенте, и ваше приложение использует стороннее ПО xnview, то почему не им сразу сохранить в индексированной палитре. Есть еще один кандидат решения проблемы ImageMagick - достаточно запустить его командной строкой с параметрами и на выходе получим и обрезанное, и серое, и индексированное, и какое угодно.

SV0L0CH 25.05.2017 19:05

Цитата:

Сообщение от laimas
И что, вы думаете эта операция автоматом догадается сохранить ваш 32 битник в индексированной палитре? Счас.

Не факт что не догадается. toDataURL выдаёт PNG, но не факт что в разных браузерах это будет один формат. Главное что полученную картинку в виде ссылки в формате data можно смело вставлять в <img/>, в <a/> и в тот же <canvas/> или открывать в той же или новой вкладке. С этой точки зрения разработчик браузера должен хотя бы пытаться оптимизировать размер ради удобства пользователя.
Собственно я рекомендую при разработке браузерного приложения переложить максимум задач на браузер.
Taifune, Таки надо объяснить заказчику что экономить на размере изображений нецелесообразно. Память нынче дешевая. Кроме случая когда данные надо передать по тормознутому модему(у меня самого мобильный интернет) это не актуально. При работе на локальной машине, даже если это мобилка, это значение вообще не имеет. Выгодней в таких случаях задействовать алгоритм типа GZIP, для таких задач уже есть готовые решения под браузер. Рекомендую сосредоточится на этом.

laimas 25.05.2017 19:20

Цитата:

Сообщение от SV0L0CH
toDataURL выдаёт PNG, но не факт что в разных браузерах это будет один формат. Главное что полученную картинку в виде ссылки в формате data можно смело вставлять в <img/>

Автору не это нужно, а 8-битное изображение. А если говорить об оптимизации, то base64 на это претендовать не может. )

laimas 25.05.2017 19:21

Цитата:

Сообщение от SV0L0CH
Не факт что не догадается.

Есть надежда, что все-таки получится? :)

Taifune 26.05.2017 11:54

Цитата:

Сообщение от laimas (Сообщение 453428)
И что, вы думаете эта операция автоматом догадается сохранить ваш 32 битник в индексированной палитре? Счас. :)



Я вам давал ссылку, но там сохранение в GIF и с использованием уже готовой библиотеки, если нечто готовое для PNG-8 я не знаю.

Самому писать, так это согласно формата. Поэтому и не понятно нахрена вам эти заморочки. Если все-таки предполагается веб, а значит и хранение результата на сервере, то разумнее всего отдать это серверу на растерзание. К примеру, если серверный язык, это РНР, то вашу проблему тремя строками кода решает GD.

Если же на клиенте, и ваше приложение использует стороннее ПО xnview, то почему не им сразу сохранить в индексированной палитре. Есть еще один кандидат решения проблемы ImageMagick - достаточно запустить его командной строкой с параметрами и на выходе получим и обрезанное, и серое, и индексированное, и какое угодно.

Ох елки.. Я как раз не думал что одна операция догадается что-то сделать я лишь предположил что это операция сохраняет переданный массив в виде файла и если я таки смогу отконвертировать в массиве в нужный вид то этой командой можно будет файл построить.

Так теперь далее.. Приложение мое не использует XnView. Это приходится пользователю делать ручками.. Фотки эти мне на сервере ненужны. Они идут для другой программы. Которая уже написана( не мной, это законченный продукт и изменить что то в нем нет возможности). Получать файл тут и далее открывать его в той программе и менять битность и сохранять. А про имадж меджик заинтересовали.. Если его запуск по отношению к файлам в папке возможно реализовать через JS может быть это бы и сошло, но вот беда JS очень параноидальный язык и чую получить доступ к командной строке если не невозможно то очень не просто...

Taifune 26.05.2017 12:08

Я тут получил файл который выдает уже программа в которую я гружу свои фотки. И о чудо ? Что это за формат ? Что скажете профессор ?

Как мне вам верить ? ) Вы же говорили 8битного джепега не бывает и это вообще чуш)

Dilettante_Pro 26.05.2017 12:24

Цитата:

Наиболее распространённым, поддерживаемым большинством доступных кодеков, является последовательное (sequential JPEG) представление данных, предполагающее последовательный обход кодируемого изображения разрядностью 8 бит на компоненту (или 8 бит на пиксель для чёрно-белых полутоновых изображений) поблочно слева направо, сверху вниз.
https://ru.wikipedia.org/wiki/JPEG


Часовой пояс GMT +3, время: 15:40.