在Chrome中使用toDataURL有其他选择吗
Are there any alternatives for using toDataURL in Chrome?
主要问题是我必须处理许多图像。我不能对所有这些都使用crossOrigin属性。
My code looks like this:
<script>
var c=document.getElementById('example');
var ctx=c.getContext('2d');
var LeftHand = new Image();
LeftHand.id="imq1";
var RightHand = new Image();
RightHand.id="imq2";
var Body = new Image();
Body.id="imq6";
boyBody.src = "https://getout-s3.s3.amazonaws.com/baseBody/boy-02.png";
LeftHand.src = "https://getout-s3.s3.amazonaws.com/NK4XtQvkZ4MGctZf_.hand(unisex)_13.png ";
RightHand.src = "https://getout-s3.s3.amazonaws.com/OPdFPcU2sORgNmTy_.hand(unisex)_9.png ";
Body.src = "https://getout-s3.s3.amazonaws.com/HRZqrTYSdJXGedgX_.Body_(m)7.png ";
boyBody.onload = function() {
ctx.drawImage(boyBody, 0, 0, boyBody.width/2, boyBody.height/2);
ctx.drawImage(LeftHand, (899 - LeftHand.width/2)/2, (867 - LeftHand.height/2)/2, LeftHand.width/2, LeftHand.height/2);
ctx.drawImage(Underwear, (599 - Underwear.width/2)/2, (845 - Underwear.height/2)/2, Underwear.width/2, Underwear.height/2);
ctx.drawImage(Body, (599 - Body.width/2)/2, (557 - Body.height/2)/2, Body.width/2, Body.height/2);
var img = c.toDataURL("image/png");
document.write('<img src="' + img + '" />');
};
</script>
浏览器不允许程序员导出跨域内容,这是出于非常好的安全原因。你的私人银行信息是跨域内容,你不想把它作为导出设备提供给小偷。
因此,在画布上绘制跨域图像后,context.toDataURL
会立即被禁用。context.getImageData
的禁用也是如此。(context.getImageData是导出画布内容的另一种方法)。
要允许将画布内容导出给用户,您必须将所有图像托管在与网页相同的域中
顺便说一句,在绘制所有元素之前,必须给它们加载的时间。这里有一个图像加载器,它可以提前加载所有图像,然后在所有图像完全加载时调用start()。将ctx.drawImage放入start()。
// put the paths to your images in imageURLs[]
var imageURLs=[];
imageURLs.push("https://getout-s3.s3.amazonaws.com/baseBody/boy-02.png");
imageURLs.push("https://getout-s3.s3.amazonaws.com/NK4XtQvkZ4MGctZf_.hand(unisex)_13.png");
// ...etc, for all images
// the loaded images will be placed in imgs[]
var imgs=[];
var imagesOK=0;
loadAllImages(start);
function loadAllImages(callback){
for (var i=0; i<imageURLs.length; i++) {
var img = new Image();
imgs.push(img);
img.onload = function(){
imagesOK++;
if (imagesOK>=imageURLs.length ) {
callback();
}
};
img.onerror=function(){alert("image load failed");}
img.crossOrigin="anonymous";
img.src = imageURLs[i];
}
}
function start(){
// the imgs[] array now holds fully loaded images
// the imgs[] are in the same order as imageURLs[]
}
相关文章:
- 选择框已禁用或由其他选择框的某个选项启用
- 使用Javascript创建的Cookie在C#代码中不可访问..任何原因或其他选择
- get_browser降低页面加载速度,任何其他选择
- 如果选择了其他选择项目,则隐藏选择项目
- jQuery选中后检查其他选择元素
- 在Chrome中使用toDataURL有其他选择吗
- 设置为在没有父级和子级的其他选择器上可见
- 当满足其他选择菜单值时取消隐藏选择菜单 - jQuery
- 自定义 jquery 选择框,其中跨度作为其他选择的值更改
- 从选择框中动态删除在其他选择框中选择的选项
- 禁用其他选择中的选项
- 在JavaScript中,换行符实际上并不是在创建新行,有没有其他选择,或者我做错了什么
- 拉斐尔2.0.2没有;似乎再也没有.animateAlong命令了.有其他选择吗
- 根据其他选择框的值重置选择框
- 当从“0”中选择一个选项时;“多选”;,将其从其他选择中删除(并反转)
- Javascript或Jquery筛选出所选对象,用于具有相同数据的其他选择
- 如果我选择了true值,则通过jQuery将其分配给其他选择选项
- 在Express2.x中的dynamicHelper(或其他选择)中执行异步调用
- 指定在用逗号分隔jQuery选择器时,哪个jQuery选择器的优先级高于其他选择器
- 当选中一个项目时,使所有其他选择项目变灰(禁用)