【问题标题】:Image doesn´t appear canvas [duplicate]图像没有出现在画布上[重复]
【发布时间】:2019-03-15 16:03:00
【问题描述】:

我第一次使用画布,我正在练习从图像中获取数据以更改其属性。问题是我正在使用这段代码:

       <script type="text/javascript" src="jquery-3.3.1.min.js">
       </script>
       <script type="text/javascript">
        $(document).ready(inicio);
        function inicio() {
        setTimeout(drawing(),100000);
        }
        function drawing() {
        var canvas = document.getElementById("cnv1");
        var context = canvas.getContext("2d");

        var img = new Image();
        img.src = "tomatoes.jpg"
        context.drawImage(img, 10, 10);

        var imageData = context.getImageData(0, 0, 500, 500);
        var data = imageData.data;

        /*for (var i=0; i<data.length; i+= 4) {
            data[i]   = 255-data[i];
            data[i+1] = 255-data[i+1];
            data[i+2] = 255-data[i+2];

        }*/

        /*for (var i=0; i<data.length; i+= 4) {
            data[i]   = data[i]+100;
            data[i+1] = data[i+1]+100;
            data[i+2] = data[i+2]+100;

    }*/

        for (var i=0; i<data.length; i+= 4) {
            data[i]   = data[i]-100;
            data[i+1] = data[i+1]-100;
            data[i+2] = data[i+2]-100;

        }

         context.putImageData(imageData,0,0)

    }
</script>
<style type="text/css">
    canvas {
        border: 1px solid black;
    }
</style>

我得到了 For 方法的正确结果,我的问题是大多数时候图像根本没有加载,它只是出现在一个页面刷新上,下一次刷新就消失了,它没有好好工作。有什么想法吗?。

【问题讨论】:

  • 是的,似乎 setTimeout 的问题不是引导图片加载的正确方法。很有帮助。

标签: javascript html5-canvas


【解决方案1】:

接下来是我的代码,但它不适用于 Stack Overflow。您必须复制代码并在您的计算机中进行测试。你可以看到它在这个Codepen project 中工作。

重要提示:您必须使用您网站中的图片。否则你会得到这样的错误:Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': Canvas has been tainted by cross-origin data. 是的,有一些方法可以规避这个问题。并不总是有效

对您的代码的观察:请不要这样做:data[i]-100 since data[i] 可能小于 100。

function drawing() {
  var data;
  var canvas = document.getElementById("cnv1");
  var cw = (canvas.width = 270);
  var ch = (canvas.height = 250);
  var context = canvas.getContext("2d");

    var img=new Image();
                    img.src = "image.jpg";
                    img.onload = function() {
                    context.drawImage(this, 10, 10);

    var imageData = context.getImageData(0, 0, 270, 250);
    data = imageData.data;

    console.log(imageData.data)


    for (var i = 0; i < data.length; i += 4) {
      data[i] = 255 - data[i];
      data[i + 1] = 255 - data[i + 1];
      data[i + 2] = 255 - data[i + 2];
    }

    context.putImageData(imageData, 0, 0);
  }
}
drawing()
<canvas id="cnv1"></canvas>

【讨论】:

  • 谢谢,我看到你没有使用 setTimeout() 方法,这是我问自己的问题,如果它不是很可靠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2012-01-06
  • 2016-07-07
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多