gpt4 book ai didi

javascript - 为什么用图像绘制的 Canvas 与图像本身的颜色略有不同?

转载 作者:搜寻专家 更新时间:2023-10-31 08:10:32 24 4
gpt4 key购买 nike

我正在将图像绘制到 HTML Canvas 上并从中获取图像数据以查找特定像素的颜色。该图像是一张 map ,其中每个国家/地区的颜色都不同。我想将 .getImageData() 返回的颜色与我手工制作的颜色列表进行交叉引用,以查找任何给定像素所在的国家/地区。

我的问题是,我在 Canvas 上绘制的图像和绘制的图像颜色略有不同。

这是绘制到 Canvas 上的原始图片:

original picture

这是我将 Canvas 下载为 PNG 时得到的图片:

Outcome

两者看起来几乎一模一样,但如果你下载它们并在照片编辑软件中打开它们,你会发现它们并非如此。例如上图灰色海洋为73,73,73,255,下图灰色海洋为71,71,71,255。

我仍然可以完成确定像素所在国家/地区的目标,但我需要根据我下载的图片绘制到 Canvas 后创建一个新列表。

这似乎是一个非常奇怪的问题。

如果有人想知道,我的代码如下所示:

HTML:

<img scr="active_map.png" class="active" id="activeImage">
<canvas id="activeCanvas" width="439px" height="245px">Your Browser Doesn't Support HTML5 Canvases... Sorry :( </canvas>

JS:

var activeCanvas = document.getElementById('activeCanvas')
var activeContext = activeCanvas.getContext("2d");
var activeImage = document.getElementById('activeImage')
activeContext.drawImage(activeImage,0,0);
var activePixelData = activeContext.getImageData(0,0,439,245)["data"];

此外,我在 Ubuntu 上使用 Firefox 31

-感谢您的帮助

最佳答案

正如@GameAlchemist 所提到的,您正在使用的 PNG 存在潜在的 Gamma 校正问题,即 RGB 值不会被一致地解释。

Henri Sivonen 的 The Sad Story of PNG Gamma “Correction”提供了非常透彻的分析。简而言之:

In order to compensate for the different gammas, the display gamma of the system an image was authored on and the display gamma of the system where the image is being displayed both need to be known to the piece of software displaying the image. The PNG format provides a means for storing the (reciprocal of) display gamma of the authoring system to the image file. It is up to the program writing the file to store the native display gamma of the image, and then it is up to program displaying the file to compensate.

他建议使用 Pngcrush删除可能导致这种不一致的颜色配置文件。我已经确认他的技术 (pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB infile.png outfile.png) 确实有效。这是您修改后的图片:

enter image description here

您会注意到它小了 6KB。我已经确认这在 Firefox 之前和之后都按预期工作(从 RGB 值 71、71、71 到值 73、73、73)。

关于javascript - 为什么用图像绘制的 Canvas 与图像本身的颜色略有不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com