圖片存儲在本地時,是默認沒有域名的,用getImageData方法時,瀏覽器會判定爲跨域而報錯!
摘了一段網上的解析:
1、首先沒有服務器環境(如:本地的html網頁,操作本地的圖片),
就會報"Unable to get image data from canvas because the canvas has been tainted by cross-origin data"錯誤。
因爲本地測試用的圖片是文件夾內的,js跨域限制是不能獲取非同一域名下的數據的,
而本地的位置是沒有域名的,所以瀏覽器都認爲你是跨域,導致報錯。
2、爲了阻止欺騙,瀏覽器會追蹤image data。
當把一個和canvas的域不同的圖片放到canvas上,這個canvas就成爲“tainted”(被污染的),瀏覽器就不讓你操作該canvas的任何像素。
是爲了阻止多種類型的XSS/CSRF攻擊(兩種典型的跨站攻擊)。
其他瀏覽器可以設置 cross-origin 屬性解決;
ie不支持,則通藉助ajax和URL.createObjectURL()方法曲線救國
或者使用第三方庫 canvg