У меня есть 2-пиксельное изображение PNG со следующим rgba:
image.setAt(0, 0, { red:255, green:10, blue:10, alpha:100 });
image.setAt(1, 0, { red:255, green:255, blue:55, alpha:255 });
image.setAt(0, 1, { red:90, green:10, blue:65, alpha:250 });
image.setAt(1, 1, { red:60, green:255, blue:0, alpha:14 });
(с использованием модуля node pngjs-image)
Когда изображение загружается браузером (firefox) и копируется на холст для проверки данных rgba, возвращается следующее:
255 7 7 100
255 255 55 255
89 9 64 250
54 255 0 14
Похоже, что сохраняются только значения альфа-канала, а цвета пикселей изменяются произвольно.
Что происходит?
(с использованием Firefox 41 в Linux)
ИЗМЕНИТЬ
Из вступления к модулю nodejs pngtoy я обнаружил следующее:
Низкоуровневая реализация парсера / чтения / декодера файлов PNG с использованием JavaScript в зависимости от размера клиента.
Почему это так, если браузеры уже поддерживают PNG?
Браузер просто загрузит и преобразует любой тип PNG в растровые изображения RGBA. Он также применит ICC и гамма-коррекцию к изображению, что приведет к другим значениям, чем в исходном растровом изображении.
Однако я подумал, что в самом PNG должны быть блоки коррекции ICC и Gamma, чтобы браузер применил их. Производит ли браузер такие манипуляции с изображениями для любого файла png даже без фрагмента ICC / gamma внутри файла?