ctx.drawImage()不起作用,但在使用常规PNG时可以正常工作。
var context = document.getElementById("canvas").getContext('2d');
....
function draw(img, x, y){
context.drawImage(img, x, y);
}
//actulaly there is loop here, but for simplicity I put only this.
var img = new Image();
img.src = "images/a.png";
img.onload = draw(img, 10, 10);
如果我使用普通的PNG图像,它可以使用,但是如果PNG具有透明度并且背景被删除,则它无效。 你们有什么想法吗?谢谢。
答案 0 :(得分:1)
img.onload
采用函数引用而不是函数调用。
这样做:
img.onload=function(){draw(img,10,10);}
如果你需要加载很多图像,这里是一个图像预加载器,在调用start()函数之前完全加载所有图像:
// image loader
// put the paths to your images in imageURLs[]
var imageURLs=[];
// push all your image urls!
imageURLs.push("");
imageURLs.push("");
// the loaded images will be placed in images[]
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[]
}