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

标签 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],但 data = [150, 0, 112, 255, 158, 0, 117 , 255, 200, 0, 149, 255] 在手机上(以及 iPhone 模拟器)。

<小时/>

@凯多 我已阅读duplicated post但似乎问题有所不同。

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

无法使用全尺寸图像版本:

jsfiddle.net/1c2q61be/3/

但是,我发现这段代码在剪切时工作正常,并且只获取图像的左上角,如以下链接所示:

jsfiddle.net/1c2q61be/4/

但是 Canvas 宽度和高度强制设置为 100,100 版本的全尺寸图像不起作用(这就是我使用 canvas.toDataURL('image/png') 获取剪切版本图像数据的方式):

jsfiddle.net/1c2q61be/5/

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

非常感谢。

<小时/>

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

问题已经解决了。我将解决方案留在这里以供将来引用。

最佳答案

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

问题已经解决了。我将解决方案留在这里以供将来引用。

关于javascript - 使用 getImageData 时在移动设备上获取大图像的错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571902/

相关文章:

javascript - Bootstrap3 Mega 菜单更改下拉宽度

javascript - 在 JavaScript 中按对象参数过滤和计数对象的 JSON 对象

android - 在 FirebaseRecyclerViewAdapter 中过滤

iphone - 关于 FMDB 和 JOIN 子句的问题

javascript - 有什么方法可以在 osx 浏览器的 javascript 中检测 ctrl + 单击?没有 jQuery

android - 重用或重新创建观察者?

java - 如何去除 map 上标记上的阴影?

ios - 如何在 UIView 中持续更新绘图

ios - 核心数据和累积轻量级迁移

javascript - nodemon:expressjs 应用程序未启动干净退出 - 在重新启动之前等待更改