Android 来自内部图像的 getImageData() - SECURITY_ERR: DOM 异常 18
Android getImageData() from the inner image - SECURITY_ERR: DOM Exception 18
在我的应用程序中,我在 canvas 上复制图像,然后从中获取数据。该图像位于项目的根目录中。
这是一个简化的代码:
var img = new Image();
img.src = picture.jpg
img.onload = function(){
img.setAttribute('crossOrigin','anonymous');
var canvas= document.createElement('canvas');
canvas.width = 200;
canvas.height = 200;
canvas.getContext('2d').drawImage(img,0,0,200,200);
var iData = canvas.getContext('2d');
try{
var imgData = iData.getImageData(0,0,200,200);
}
catch(e){
alert('error: ' + e + '\nimg.src: ' + img.src);
}
这里有一个例外:
ERROR: SECURITY_ERR: DOM Exception 18
img.src: file:///android_asset/www/picture.jpg
所以,图像是从同一个域中获取的;在这种情况下,我没有找到对 Manifest 的任何额外许可。
此外,我尝试从较小的正方形获取图像数据,如下所示:
imgData = iData.getImageData(10,10,190,190);
为什么我得到异常?
就这么简单。
在 MainActivity.java 中必须获得许可:
webView.getSettings().setAllowFileAccessFromFileURLs(true);
就这些了。
在我的应用程序中,我在 canvas 上复制图像,然后从中获取数据。该图像位于项目的根目录中。 这是一个简化的代码:
var img = new Image();
img.src = picture.jpg
img.onload = function(){
img.setAttribute('crossOrigin','anonymous');
var canvas= document.createElement('canvas');
canvas.width = 200;
canvas.height = 200;
canvas.getContext('2d').drawImage(img,0,0,200,200);
var iData = canvas.getContext('2d');
try{
var imgData = iData.getImageData(0,0,200,200);
}
catch(e){
alert('error: ' + e + '\nimg.src: ' + img.src);
}
这里有一个例外:
ERROR: SECURITY_ERR: DOM Exception 18
img.src: file:///android_asset/www/picture.jpg
所以,图像是从同一个域中获取的;在这种情况下,我没有找到对 Manifest 的任何额外许可。 此外,我尝试从较小的正方形获取图像数据,如下所示:
imgData = iData.getImageData(10,10,190,190);
为什么我得到异常?
就这么简单。 在 MainActivity.java 中必须获得许可:
webView.getSettings().setAllowFileAccessFromFileURLs(true);
就这些了。