这个问题与Firefox 3.5颜色校正破解有密切关系吗?
我的情况是,我有一个画布游戏,其中使用的图像带有关于其形状、连接点等的附加信息。这些信息存储在PNG图像本身中,使用有意义的颜色(例如RGB(255255,0)表示连接点)。
加载元素并在画布上绘制创建Image对象,设置img.src,在img.load函数中,我读取敏感信息对图像数据进行预处理(并在绘制到画布之前从图像数据中删除敏感像素)。
问题是:在FF中,原本应该是255255,0的像素实际上是255254,0。我对FF颜色校正没有问题(我不在乎显示的图像是否有正确的颜色,或者是否有轻微的修改),但我希望获得图像数据会给我未校正的数据。我正在寻找一个不涉及更改服务器上的图像的解决方案。有办法吗?例如。img.setColorProfile(),或img.disableColorCorrection(),或img.getImageData(disableColorCorrection)还是img.getImage Data(colorProfile)?
这个问题可能与图像加载有关,而与图像绘制有关。
我认为正确的解决方案是从图像中去除颜色配置文件信息(这似乎是你想要的)。如果可能的话,如果你不需要完整的原始数据,服务器会为Firefox提供另一个图像资源。
http://f6design.com/journal/2006/12/01/fixing-png-gamma/
此外,如果服务器协同工作并允许CORS和AJAX加载图像,您可以用纯Javascript解码PNG内部帧。使用png.js在Javascript中解码图像,并根据图像数据创建源<canvas>
(而不是<img>
)。通过这种方式,您可以控制每个PNG像素的RGB值。
https://github.com/devongovett/png.js