Javascript获取Facebook个人资料图片像素数据

时间:2015-12-18 14:33:32

标签: javascript facebook image profile emscripten

我需要从随机用户的Facebook个人资料图片中获取像素数据,以便我可以通过Emscripten将其传递到我们的C ++应用程序。也就是说,我需要每个像素的RGB值。我已经尝试了很多不同的方法,使用Javascript FBSDK,图形调用,下载图像,并尝试绘制到我创建的画布,但我遇到了各种各样的问题,例如跨域问题。我不需要将它渲染到可见的画布,我只需要将数据传递回我们的应用程序。

请问一个简单的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以从Facebook获取图像像素数据,通过Ajax请求而不是img标记获取图像。

具体来说,你可以:

  • 使用XMLHttpRequest
  • 获取图像数据
  • 整理Blob
  • 中的数据
  • src的{​​{1}}设置为blob的对象网址
  • 在加载图像时,使用画布上下文Image
  • 将图像放在画布上
  • 使用上下文drawImage
  • 获取像素数据

以下。代码适用于我,在Chrome上,没有任何安全问题

getImageData

您可以在http://plnkr.co/edit/fEwoIQRQhaCDRHkwNdvr?p=preview

看到这一点

供参考,看起来Facebook个人资料图片设置跨域ajax的标题。具体而言,答案设置为document.addEventListener('DOMContentLoaded', function() { var xhr = new XMLHttpRequest(); xhr.responseType = 'arraybuffer'; xhr.addEventListener("load", onResponse); xhr.open("GET", "http://graph.facebook.com/61308470/picture"); xhr.send(); var image = new Image(); var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); function onResponse() { var blob = new Blob([xhr.response], {type: 'image/jpeg'}); var url = (window.URL || window.webkitURL).createObjectURL(blob); image.src = url; } image.onload = function() { context.drawImage(image, 0, 0); var data = context.getImageData(0, 0, 50, 50).data; // Pixel data of the image console.log(data); // Cleanup (window.URL || window.webkitURL).revokeObjectURL(url); } });

我的基础是this answer to "Using raw image data from ajax request for data URI"