Цитата:
Мне не нужна четкая палитра. Я понимаю что реальных цветов там 16 за глаза. Можно палитру эту топором рубить. Всяк в оставшихся 256 хватит оттенков что бы изображение не пострадало. Я делаю изображение серым с помощью кода
var imageData = context.getImageData(0, 0, 320, 400);
var data = imageData.data;
//alert("Hello gray!.2");
for(var i = 0; i < data.length; i +=4) {
var brightness = 0.25 * data[i] + 0.70 * data[i + 1] + 0.09 * data[i + 2] ;
// red
data[i] = brightness;
// green
data[i + 1] = brightness;
// blue
data[i + 2] = brightness;
data[i + 3] = 255;
}
context.putImageData(imageData, 0, 0);
И теперь есть необходимость сохранить файл в 8 бит. Цитата:
Время есть. Но пару недель на это тратить просто не разумно. Задача редкая, поэтому я и не смог нагуглить библиотеку. Просто какая есть возможность именно для формирования сохраненного файла в 8бит. |
Цитата:
Цитата:
Вы хотя бы на Вики почитайте что такое 8-битная палитра и в каких форматах изображения ее можно сохранить (если ориентироваться на веб), и что такое HighColor и TrueColor изображения. |
Цитата:
//alert("Hello save!.");
canvas.toDataURL('image/jpg');
var gh = canvas.toDataURL('image/jpg', 1.0);
var a = document.createElement('a');
a.href = gh;
a.download = 'photo.jpg';
Вы знаете как это сделать ? Я нет. И где узнать не знаю. |
Цитата:
|
Цитата:
Math.floor((data[0]*11+data[1]*16+data[2]*5)/32) Это разные особенности восприятия яркости в разных условиях? Свои цифры взял из кода Qt. А относительно оптимизации размера, можно взять исходник библиотеки для работы с подходящим форматом и тупо перевести с C/С++ или другого языка на JS. Я даже уверен что полученный код будет компактней раз так в 3. Можно так же поискать компилятор из C/C++ в JS, или интерпретатор, но тогда будет проигрыш по размеру кода и по быстродействию. Так что надо делать выбор между размерами кода и размером картинок. Я бы предоставил все оптимизации непосредственно браузеру. Тогда код процедуры сохранения данных сведётся к такому:
location.href = canvas.toDataURL().replace("image/png", "image/octet-stream")
|
Цитата:
которое я написал работает через костыль.. А именно после захвата и обрезки изображения его приходится открывать в доп приложении (XnView) и переводить там в глубину цвета 8. потому что 32 бита при погрузке в следующую систему искажаются кардинально. Соответственно вы говорите что сохранить в канвас в PNG8 средствами javascript нет возможности? Что тогда можно еще подключить ? Цитата:
"image/octet-stream" тоже встречал о чем то подобном инфу. Так это получается запись потока в файл? Кстати вот тут другой профессор говорил что канвас не может содержать индексированный цвет, но с другой стороны мне и ненужно его выводить перед сохранением на просмотр. Может есть возможность использовать обычный массив для индексации и перевода в 8 бит? |
Цитата:
Возьмите свое PNG-8 изображение, загрузите его в canvas, а затем сохраните. Сравните размеры первого и второго, и посмотрите свойства его, глубина цвета сохраненного будет 32 бита. |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 02:11. |