2013-07-11 72 views
1

在jQuery/javascript中显示img时,是否有任何方法可以访问完整的二进制表示(或其base64编码)?如从<img>提取二进制或base64

<img id="myImage" src="http://someURL/someImage.png" /> 

的Javascript

$('#myImage).getBuffer() 

原因是:我想要把图像从另一个起源于画布并对其进行修改。 将源代码直接放在画布中(请参阅​​3210),我什么也没有(相同原点策略违反?)。 AJAX请求有同样的问题。

我可以(并且已经做了)修改服务器以允许新的外部来源(CORS)。 它可以工作,但是这种起源是一个动态的本地IP,并且纯粹的客户端会更好。

回答

2

得到的二进制数据没有一个。你不能在客户端做任何事情来覆盖同源策略(除非你破解浏览器或者让你自己阻止浏览器在画布上设置污染标志(或者更确切地说origin-clean标志):-))。

只要源图像的起源!==页面的起源标准要求浏览器设置画布污染,除非源服务器接受其他来源的使用。客户端无法解决此问题(出于“安全原因”)。

图像参数不是起源干净,如果它是一个HTMLImageElement或 HTMLVideoElement其原产地是不一样的入口脚本的 起源,或者如果它是一个HTMLCanvasElement其位图的起源清洁 标志是假的,或者它是一个CanvasRenderingContext2D对象,其 刮擦位图的origin-clean标志为false。

来源:WhatWG 4.8.11.2.9 (last paragraph)

如果是这样(4.8.11.2.16):

...如果划痕位图的起源,清洁标志被设置为false,它 必须抛出一个SecurityError异常; ...

你得到的选项是:

  1. 修改源服务器提供Access-Control-Allow-Origin(最小)头(因为你已经做了),然后使用crossOrigin属性的图像标签(<img src="other-site" crossOrigin />,默认状态是anonymous - 这只是一个要求和高达服务器接受。
  2. 使用您自己的服务器作为代理来从源服务器获取映像,并将其提供给同一来源的客户端(例如http://mysite/getImage.cgi|.aspx|.php|..?src=other-site/img)。
  3. 修改浏览器...等:-P

您可以自己低级别解析图像,但是您需要通过File API将图像“上传”到客户端,并从那里解析它,这会更加不方便恕我直言(通过您自己的服务器充当代理服务器会更简单一些)。

+0

感谢您的帮助,我想[1]是我们的要走的路。 – malber

0

您可以点击这里从图像https://gist.github.com/leotsem/960542

+0

这是受同源国家政策,使用画布 –

+0

谢谢,但正如问题所示,我正在寻找一个跨服务器端的解决方案CORS – malber