2

这个问题与Firefox 3.5 color correction hack有密切关系吗?

我的情况是我有一个画布游戏,其中使用的图像带有关于它们的形状、连接点等的附加信息。这些信息存储在 PNG 图像本身中,使用有意义的颜色(例如 RGB(255,255 ,0) 用于连接点)。

加载元素并在画布上绘画创建 Image 对象,设置 img.src,并在 img.load 函数中预处理读取敏感信息的图像数据(并在绘画到画布之前从图像数据中删除敏感像素)。

问题:在FF中,应该是255,255,0的像素实际上是255,254,0。我在 FF 颜色校正方面没有问题(我不在乎显示的图像是否具有正确的颜色,或稍作修改),但我希望获取图像数据会给我未校正的数据。我正在寻找一种不涉及更改服务器上的图像的解决方案。有什么办法吗?例如。img.setColorProfile(),还是 img.disableColorCorrection(),还是 img.getImageData(disableColorCorrection) 还是 img.getImageData(colorProfile)?

4

1 回答 1

1

与图像绘制相比,图像加载的问题可能更多。

我认为正确的解决方案是从图像中去除颜色配置文件信息(您似乎想要 aovid)。如果您不需要完整的原始数据,请尽可能为 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

于 2012-10-06T10:24:38.450 回答