Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我在HTML画布中显示URL中的图像时遇到问题_Javascript_Html_Canvas - Fatal编程技术网

Javascript 我在HTML画布中显示URL中的图像时遇到问题

Javascript 我在HTML画布中显示URL中的图像时遇到问题,javascript,html,canvas,Javascript,Html,Canvas,据我所知,我的代码与W3上的代码完全相同,只是我制作了一个新图像,而不是使用html中已有的图像,但我无法让它显示任何内容 <body> <center><canvas id="myCanvas" width="1000" height="750"></canvas></center> <script> function newImage(src, width, height) { var i

据我所知,我的代码与W3上的代码完全相同,只是我制作了一个新图像,而不是使用html中已有的图像,但我无法让它显示任何内容

<body>
<center><canvas id="myCanvas" width="1000" height="750"></canvas></center>
<script>
    function newImage(src, width, height) {
            var img = document.createElement("img");
            img.src = src;
            img.width = width;
            img.height = height;
            return img;
        }   

    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var i = newImage("http://i.imgur.com/ELsS4mN.jpg", 1000, 750);
    ctx.drawImage(i,0,0);
</script>

函数newImage(src、宽度、高度){
var img=document.createElement(“img”);
img.src=src;
img.width=宽度;
img.height=高度;
返回img;
}   
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
变量i=newImage(“http://i.imgur.com/ELsS4mN.jpg", 1000, 750);
ctx.drawImage(i,0,0);

出现此问题是因为您在图像对象完全下载之前返回了它。因为画布无法将图像数据渲染为背景图像

只有在图像数据完全可用时,才应使用
onload
回调函数和
drawImage
。这应该起作用:

function newImage(src, width, height, callback) {
    var img = new Image();
    img.width = width;
    img.height = height;
    img.onload = function () {
        callback(img);
    };
    img.src = src;
}

var c = document.getElementById("myCanvas"),
    ctx = c.getContext("2d");

newImage("http://i.imgur.com/ELsS4mN.jpg", 1000, 750, function(image) {
    ctx.drawImage(image, 0, 0);
});
请注意,不是从
newImage
函数返回图像,而是在其中传递回调函数,并在下载完成后调用它

函数newImage(src、宽度、高度、回调){ var img=新图像(); img.width=宽度; img.height=高度; img.onload=函数(){ 回拨(img); }; img.src=src; } var c=document.getElementById(“myCanvas”), ctx=c.getContext(“2d”); 新图像(“http://i.imgur.com/ELsS4mN.jpg“,1000,750,功能(图像){ ctx.drawImage(图像,0,0); });
看起来很奇怪,谢谢你知道我用chrome从本地html文件运行它时为什么会显示空白页吗?因为你的浏览器正在阻止它。。可能在请求上有“允许同源安全性”标记。使用Web Inspector(通常为F12),转到控制台日志并调用newImage方法(使用控制台中的中间窗口)以验证原因。。您可以通过关闭浏览器并使用特定参数(命令)打开应用程序来关闭这些浏览器安全措施。。。确保所有浏览器实例(包括任务管理器中的隐藏窗口)都已关闭。不,这不是安全性。这是个时间问题,因为在画布上渲染图像时还不可用。好吧,这完全有道理,您的代码解决了这个问题。我想知道是不是因为这是一张相当大的照片。谢谢你的帮助,是因为图像相当大。如果它解决了你的问题,考虑接受答案来结束这个问题。