我有以下RGBA 2像素PNG图像:显示时,浏览器是否更改了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 });
(使用节点的pngjs图像模块)
当图像是由浏览器(Firefox)加载并复制到画布测试rgba数据,将返回以下内容:
255 7 7 100
255 255 55 255
89 9 64 250
54 255 0 14
似乎只有Alpha通道值被保留,而像素颜色被任意改变。
发生了什么事?
(使用Firefox 41在Linux上)
编辑
从介绍上pngtoy的NodeJS模块我发现以下几点:
PNG文件解析器/读者的低级实现/解码器使用 客户端大小的JavaScript。
为什么当浏览器支持PNG时呢?
浏览器将简单地加载并将任何PNG类型转换为RGBA 位图。它还会对图像 应用ICC和伽马校正,从而产生与原始位图不同的值。
但是,我认为PNG本身应该有ICC和Gamma校正块,以便浏览器应用它们。浏览器是否对任何PNG文件进行这种图像处理,即使文件内没有ICC / gamma块?
火狐的行为取决于gfx.color_manangement.mode有关设置:配置(默认值是2,尝试重置它为0,看看会发生什么),以及您的2x2的图像是否包含色彩管理信息(GAMA(sRGB)中, cHRM和/或iCCP块)。如果您发布实际的PNG文件的副本,这将会很有帮助。 –
稍后我会放入原始日期。用gfx播放没有成功。没有其他数据在PNG中:只有IHDR,IDAT和IEND块在里面。 – rlib
好的消除了color_management。剩下的可能是转换为预乘alpha和后。如果你有一个alpha == 0的彩色像素,会发生什么? –