- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Canvas 对象,我想使用 canvas.getImageData 从中获取某个位置的颜色。当我在其上绘制渐变并尝试从点 (0,0) 获取颜色时,chrome 的行为符合预期并返回颜色值 255,255,255,而 IE 返回 254,253,253。
我这里有一个 plunker,它显示了我的意思:
http://plnkr.co/edit/BWSn2J2N2A6poaH4WR6a?p=preview
您可以在 IE 和 Chrome 中执行此操作,您会看到不同之处。我使用 IE v11 和 Chrome v40。
也许错误是在我创建 Canvas 的过程中。
var RepaintGradient = function(gradient)
{
_gradientContext.fillStyle = 'rgb(255,0,0)';
_gradientContext.fillRect(0,0,width,height);
var gradientWTT = _gradientContext.createLinearGradient(0, 0, width, 0);
gradientWTT.addColorStop(0, "white");
gradientWTT.addColorStop(1, gradient);
_gradientContext.fillStyle = gradientWTT;
_gradientContext.fillRect(0, 0, width, height);
var gradientBTT = _gradientContext.createLinearGradient(0, width, 0, 0);
gradientBTT.addColorStop(0, "black");
gradientBTT.addColorStop(1, "transparent");
_gradientContext.fillStyle = gradientBTT;
_gradientContext.fillRect(0, 0, width, height);
var color = _gradientContext.getImageData(0, 0, 1, 1).data;
alert(color[0]+' '+color[1]+' '+color[2]);
};
这是正常行为吗,IE 和 Chrome 有这种差异,还是我在创建 Canvas 期间遗漏了什么?
最佳答案
这是由于使用子像素化时混合和合成过程中的舍入误差 - 不同的浏览器根据其方法获得不同的结果(IE 和 FireFox 给出相同的结果,webkit 浏览器给出不同的结果)。
我们对内部工作无能为力,但我们可以调整子像素,这样就不会通过简单地平移 Canvas 半像素来实现。
将这一行添加到渐变函数的顶部:
_gradientContext.setTransform(1,0,0,1, 0.5,0.5); // offset 0.5 pixel
原因是像素最初是从像素的中心渲染的,这意味着 0.5 的像素是双向插值的。平移 0.5 个像素将使中心与像素网格匹配。
更新(来自评论):
另一种使用 coordinates to calculate color 的方法 值 (HSL) 而不是选择像素(这种方法还允许您根据输入值在选择器中设置一个点):
关于Javascript canvas.getImageData IE 与 Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731423/
我所需要的只是获取 Canvas 上单个像素的状态,但我注意到它非常慢。 这是我的 JS var state = ctx.getImageData(x,y,1,1).data; state = 'rg
如何使用 .getImageData() 从给定元素的背景图像中获取数据?项目已经在使用 jQuery,因此欢迎使用 jQuery 解决方案。 最佳答案 getImageData方法只会为您提供来自c
当图像被绘制到 Canvas 中时,如何在js中使用getImageData()? (我分别需要每个图像的数据。) 最佳答案 这是一种方法: // get the imageData for the
这个问题在这里已经有了答案: Why does changing an Array in JavaScript affect copies of the array? (12 个答案) Pass-b
因此,我在 中创建的“上下文”变量上使用函数 getImageData。部分,当我做一些事情,比如画一个矩形然后做 ctx.getImageData.data[0] 它会显示我在 Canvas 上画
您好,我有这个脚本可以检查透明像素和非透明像素。现在我做到了,所以结果来自鼠标悬停在 100px x 100px 的矩形: var data = ctx.getImageData(100,100, c
我正在尝试从图像中输出像素值。图片加载正确;此处的另一个答案表明浏览器正在尝试在图像加载完成之前读取像素,但我可以看到它在 alert() 触发时已加载。 function initContext(c
先行者:我知道已经有人问过关于这个主题的几个问题,但似乎没有一个提供直接的纯 JavaScript 解决方案。 所以我在尝试使用context.getImageData()之类的东西从 Canvas
当下面的代码返回上一张上传的图片而不是当前图片的值时,有人可以告诉我哪里出了问题吗? var imageLoader = document.getElementById('imageLoade
我正在创建一个移动网络应用程序游戏,让用户可以在屏幕上滑动来清除它。我正在尝试编写一个智能函数来检测几乎整个 Canvas 何时是透明的。 我有一个间隔,每秒调用下面的函数来进行检查。它应该工作的方式
我正在尝试获取源 Canvas 的内容,对其进行剪辑,然后将其绘制到另一个 Canvas 上。即使我的代码在使用 src PNG/new Image() 组合时工作得很好,但当源内容来自另一个 Can
为了从特定坐标的图像中获取颜色,我使用了这个答案 get-pixel-color-from-canvas-on-mouseover .然而在Powerpoint在 Microsoft 的第 56 页上
我正在尝试覆盖内置方法 CanvasRenderingContext2D.getImageData()。我想重写实现,以便修改后的函数使用 Canvas 上下文修改 Canvas ,然后调用原始函数,
分析 HTML5 Canvas 中的像素数据: var width = 960; var height = 500; var canvas = document.getEle
缩小 Canvas 后,我遇到了 context.getImageData() 问题。我已将 Canvas 添加到 HTML 页面: 我在 Canvas 上绘制了图像,就像按钮一样。我正在测试 Alp
这个问题已经有答案了: Create Canvas element with image and append to parent (2 个回答) 已关闭 8 年前。 所以,我有一个这样的函数: va
我试图通过canvas标签读取图像数据,每次我尝试检索和显示该数据时,它都出现0。即使我将数据抓取限制为 1 个像素,它也会出现“0,0,0,0”。奇怪的是,我可以使用 fillRect 并检索该数据
由于上一篇文章太困惑,我在这里开了一个新线程。 我正在尝试使用 JavaScript 从我的服务器检索 .png 文件中的确切 RGBA 值。 代码如下: img = new Image(); img
我正在加载一个 PNG 并尝试检查它是否完全不透明,这意味着 alpha channel 在整个图像上接近 100%。因此,我使用 Canvas 和 2D-Context 来获取像素数据并循环检查
我正在尝试制作一个颜色选择器。我的代码在 getImageData 之后以某种方式停止。我找不到解决方案... 还有其他方法获取像素值吗?或者问题是我正在尝试使用图片的链接? > function d
我是一名优秀的程序员,十分优秀!