检查这个小提琴:http: //jsfiddle.net/yPFjg/
它将图像加载到画布中,然后创建一个调整大小的副本并将其用作精灵。
只需进行少量修改,您就可以实现一个动态调整图像大小的图像加载器。
var ctx = document.getElementById('canvas1').getContext('2d');
var img = new Image();
var original = document.createElement("canvas");
var scaled = document.createElement("canvas");
img.onload = function() {
var oc = original.getContext('2d');
var sc = scaled.getContext('2d');
oc.canvas.width = oc.canvas.height = 16;
sc.canvas.width = sc.canvas.height = 32;
oc.drawImage(this, 0, 0);
var od = oc.getImageData(0,0,16,16);
var sd = sc.getImageData(0,0,32,32);
for (var x=0; x<32; x++) {
for (var y=0; y<32; y++) {
for (var c=0; c<4; c++) {
// you can improve these calculations, I let them so for clarity
sd.data[(y*32+x)*4+c] = od.data[((y>>1)*16+(x>>1))*4+c];
}
}
}
sc.putImageData(sd, 0, 0);
ctx.drawImage(scaled, 0, 0);
}
img.src = document.getElementById('sprite').src;
关于 getImageData 的一些注意事项:它返回一个带有数组的对象。该数组的大小为高*宽*4。颜色分量按 RGBA 顺序存储(红、绿、蓝、alpha,每个值 8 位)。