使用getImageData时,在移动设备上获取大图像的错误数据

时间:2015-09-14 18:54:44

标签: javascript android ios canvas getimagedata

由于上一篇文章太乱了,我在这里开了一个新帖子。

我正在尝试使用javascript从我的服务器检索.png文件中的确切RGBA值。

代码如下:

img = new Image();
img.crossOrigin = "Anonymous";
img.src = PNGsrc;
img.onload = function(){
    var canvas = document.createElement("canvas");
    var ctx = canvas.getContext("2d");
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img,0,0);
    var imageData = ctx.getImageData(0,0,canvas.width,canvas.height);
    var data = imageData.data; 
}

因此,我希望数组数据中的元素与PNG文件中的RGBA值完全相同。这段代码适用于台式机,笔记本电脑。但是,在移动设备(iOS 8.4.1,Android ...)上,我无法获得PNG中的原始值。

假设我在第一个像素处有[4,0,4,255],在第二个像素处有[199,0,147,255],在第三个像素处有[199,0,147,255]。我将在PC上获得data = [4,0,4,255,199,0,147,255,199,0,147,255],但数据= [150,0,112,255,158,0,117] ,255,200,0,149,255]在手机上(iPhone模拟器也是如此)。

@Kaiido 我已阅读duplicated post,但似乎问题不同。

我的图片非常大,因此可能需要一些时间来加载。在PC上它给我一个[4,0,4],因为在iOS模拟器或iPhone6上,它仍然给我错误的结果。

无法使用完整尺寸的图片版本:

jsfiddle.net/1c2q61be/3 /

但是,我发现这个代码在剪切时只能正常工作,只占用图像的左上角,如下面的链接所示:

jsfiddle.net/1c2q61be/4 /

但是将画布宽度和高度强制设置为100,100版本的全尺寸图像无法正常工作(这是我使用canvas.toDataURL(' image / png')获取剪切版图像数据的方法):

jsfiddle.net/1c2q61be/5 /

这可能是实际出错的部分。

非常感谢。

谢谢@Kaiido。那是事情出错的地方。 我使用https://github.com/devongovett/png.js/解决了这个问题 因此,javascript可以在没有浏览器支持的情况下解码png,并且能够超越移动限制。通过这种方式,我可以正确检索我的数据,而无需担心图像的大小。

问题解决了。我将在此留下解决方案,以备将来参考。

1 个答案:

答案 0 :(得分:0)

谢谢@Kaiido。那是事情出错的地方。我使用https://github.com/devongovett/png.js/解决了这个问题,因此javascript可以在没有浏览器支持的情况下解码png并且能够超越移动限制。通过这种方式,我可以正确检索我的数据,而无需担心图像的大小。

问题解决了。我将在此留下解决方案,以备将来参考。