編輯: 以dennmat的建議納入考慮,我已成功地簡化我的圖像採集腳本到使用Image()
幾行:我可以通過XDomainRequest正確讀取二進制數據嗎?
window.onload = function(){
var img;
capture_canvas = document.createElement('canvas');
capture_canvas.width = 1000;
capture_canvas.height = 1000;
document.documentElement.appendChild(capture_canvas);
img = new Image();
img.crossOrigin = "Anonymous";
img.src = "http://www.shangalulu.com/get_resource_no_64.php?url=http://www.shangalulu.com/users/1196739508/post/41-1330377498/41-1330377498_thumb.jpg";
img.onload = function() {
var context, canvas_img;
context = capture_canvas.getContext('2d');
context.drawImage(img, 0, 0, 255, 255);
canvas_img = context.getImageData(0, 0, capture_canvas.width, capture_canvas.height);
}
}
儘管這適用於Chrome和Firefox,這並不適用於IE9。以下鏈接中提到的解決方案似乎不適用於這種情況。 Uncaught Error: SECURITY_ERR: DOM Exception 18 when I try to set a cookie
IE9支持Image()
的cors功能嗎?
我遇到了一個小問題。
上述圖像實際上是包含標準報頭的PNG文件,接着255個字節從255下降到0(兩次)。這個想法是看看Internet Explorer 9如何處理通過AJAX請求接收二進制數據。
所以,這是我的問題:我注意到,當我在客戶端上收到一個大於127的字節時,該值默認爲253.有沒有一種方法讓IE讀取正確的擴展字節值?
有幾件事情要注意的:
1)我們不使用任何類型的JavaScript框架。這是一個要求,我們只有在裸骨頭的情況下才能做到這一點。
2)這個實驗的目的是製作一個乾淨的方式來得到一個圖像,所以我可以把它放在畫布上而不會弄髒它。有時這些圖像來自我們外部託管的圖像服務器,有時它來自我們無法控制的另一臺主機。
下面附件是我的測試腳本:
var request;
window.onload = function(){
request = new XMLHttpRequest();
if (window.XDomainRequest) {
request = new XDomainRequest();
}
request.open('GET',
"http://www.shangalulu.com/get_resource_no_64.php?url=
http://www.shangalulu.com/resources/images/sample/sample.png", true);
request.onload = function()
{
var binary, i, response;
response = this.responseText;
binary = "";
if (this.contentType)
{
document.documentElement.appendChild(
document.createTextNode(this.contentType));
document.documentElement.appendChild(document.createElement('br'));
}
for(i=0; i < response.length; i++) {
binary = "Line " + (i) + " --> " + ((response.charCodeAt(i)) & 0xff);
document.documentElement.appendChild(document.createTextNode(binary));
document.documentElement.appendChild(document.createElement('br'));
}
};
request.send();
}
'Image()'有什麼問題?請參閱以下示例:https://developer.mozilla.org/en/Canvas_tutorial/Using_images – dennmat 2012-03-07 16:52:54
實際上,您將在腳下嘗試操縱,管理和繪製JS中的圖像數據,而無需使用內置的瀏覽器公用事業。這將是非常緩慢,你可能會遇到無數的問題,特別是一旦你進入透明度和旋轉。 – dennmat 2012-03-07 17:03:39
我一定錯過了上次看Image()時的跨源支持。謝謝你的提示! 至於拍攝我的腳,我不完全確定您的瀏覽器內置實用程序是什麼意思。我打算在這裏做的只是將一個簡單的圖像渲染到可以發送到服務器的畫布上。 – Axle 2012-03-07 17:26:50