2012-11-21 4 views
2

html5 캔버스에서이 문제가 발생합니다. 이미지를로드 할 때 EaselJS를 사용하고 있습니다.캔버스 교차 도메인 픽셀 오류

uncaught exception: An error has occurred. This is most likely due to security restrictions on reading canvas pixel data with local or cross-domain images.

: 나는 마우스 이벤트의 종류를 추가 할 때

http://www.createjs.com/Docs/EaselJS/Bitmap.html

는하지만 (온 클릭, onMouseover와, onMouseOut) 난 내 마우스를 이동하는 순간부터 이미지의 parentcontainer에는 EaselJS이 오류가 스팸 메일 그것은 IIS 서버에서 실행 중이며 내가 얻은 이미지는 다른 도메인의 이미지입니다. --disable-web-security를 ​​사용하여 Chrome에서 작동하도록 할 수 있습니다. 그러나 나는 그것을 피하고 싶습니다.

프록시 스크립트에 관한 내용을 읽었을 때이 문제를 해결하는 데 도움이 될 수 있지만 정확히 어떻게 구현할 수 있는지 잘 모르겠습니다.

수정 사항에 대한 제안 사항이 있으십니까?

편집 : 해결되었습니다!

<%@ WebHandler Language="C#" Class="getSharepointImage" %> 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Net; 
using System.IO; 
using System.Drawing; 

public class getSharepointImage : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 
     context.Response.ContentType = "text/plain"; 

     string proxyURL = string.Empty; 
     try 
     { 
      proxyURL = HttpUtility.UrlDecode(context.Request.QueryString["u"].ToString()); 
     } 
     catch { } 

     if (proxyURL != string.Empty) 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(proxyURL); 
      //request.Credentials = new NetworkCredential("username", "password"); //needed if you wish to access something like sharepoint 
      request.Method = "GET"; 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

      if (response.StatusCode.ToString().ToLower() == "ok") 
      { 
       string contentType = "img/png"; 
       Stream content = response.GetResponseStream(); 
       StreamReader contentReader = new StreamReader(content); 
       context.Response.ContentType = contentType; 

       var outStream = context.Response.OutputStream; 
       Bitmap myImage = new Bitmap(System.Drawing.Image.FromStream(response.GetResponseStream())); 


       MemoryStream writeStream = new MemoryStream(); 
       myImage.Save(outStream, System.Drawing.Imaging.ImageFormat.Png); 
       writeStream.WriteTo(outStream); 
       myImage.Dispose(); 

      } 
     } 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

} 

답변