javascript - 为什么在 Canvas(JS) 中 toDataUrl() 在 drawImage() 之后不起作用?

标签 javascript canvas drawimage todataurl

<script>
  var canvas = document.getElementById('myCanvas');
  var context = canvas.getContext('2d');
  var img = new Image();
  img.onload = function(){
    canvas.width=img.width;
    canvas.height=img.height;
    context.drawImage(img,0,0);
  }
  img.src="2.jpg";
  function compress(){
    var dataURL = canvas.toDataURL("image/jpg",0.5);
    document.getElementById("img").src=dataURL;
  }          
  setTimeout(compress,1000);
</script>

我尝试使用 fillRect() 代替 drawImage() 作为示例。所以它正常工作......我确定原因是 drawImage()

最佳答案

如果您的图像 URL(原始 URL,而不是数据 URL)来自与运行代码的页面不同的域,那么 Canvas 将在您绘制图像时被污染到它,你将无法恢复像素。那是一种安全措施。因此,如果您在 jsfiddle 上进行测试并使用 http://placekitten.com/100/100 url 进行测试,它将无法正常工作。

请注意,大多数现代浏览器不会将两个 file:// URL 视为共享一个域,因此如果您从本地文件运行测试,它将不起作用。

关于javascript - 为什么在 Canvas(JS) 中 toDataUrl() 在 drawImage() 之后不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221273/

相关文章:

android - 多边形(六边形)的圆角

java - 小程序删除图像

javascript - 尝试使用 underscore.js 从该 json 中提取名称

javascript - 如果 Indexeddb 在 Safari 中未定义,则 Object Store.get() 的结果

javascript - Jquery:浏览器填充文本框后启动功能

javascript - 应用图像过滤器加载 fabric.image 的 fabric js 子类

javascript - 使用 Marionette.CompositeView 过滤 backbone.collection 的正确方法

javascript - Canvas 动画 - 基础知识

javascript - 在 Canvas 上绘制图像 - 比实际大

javascript - 来自视频和图像/蒙版的 Canvas drawImage() 尺寸