不过,图片增加了canvas *** 作的复杂度:必须等到图片完全加载后才能对其进行 *** 作。浏览器通常会在页面脚本执行的同时异步加载图片。如果试图在图片未完全加载之前就将其呈现到canvas上,那么canvas将不会显示任何图片。因此,开发人员要特别注意,在呈现之前,应确保图片已经加载完毕。
为保证在呈现之前图片已完全加载,我们提供了回调,即仅当图像加载完成时才执行后续代码,如代码清单如下所示。
?
<script type="text/javascript">
function drawBeauty(beauty){
var mycv = document.getElementById("cv")
var myctx = mycv.getContext("2d")
myctx.drawImage(beauty, 0, 0)
}
function load(){
var beauty = new Image()
beauty.src = "http://images.cnblogs.com/cnblogs_com/html5test/359114/r_test.jpg"
if(beauty.complete){
drawBeauty(beauty)
}else{
beauty.onload = function(){
drawBeauty(beauty)
}
beauty.onerror = function(){
window.alert('美女加载失败,请重试')
}
}
}//load
if (document.all) {
window.attachEvent('onload', load)
}else {
window.addEventListener('load', load, false)
}
</script>
基本绘画
在最基本的画图 *** 作中,你需要的只是希望图像出现处的位置(x和y坐标)。图像的位置是相对于其左上角来判断的。使用这种方法,图像可以简单的以其原尺寸被画在画布上。
drawImage(image, x, y)
var canvas = document.getElementById(‘myCanvas’)
var ctx = canvas.getContext(’2d’)ctx.drawImage(myImage, 50, 50)
ctx.drawImage(myImage, 125, 125)
ctx.drawImage(myImage, 210, 210)
缩放及调整尺寸
改变图像的尺寸,你需要使用重载的drawImage函数,提供给它希望的宽度和高度参数。
drawImage(image, x, y, width, height)
var canvas = document.getElementById(‘myCanvas’)
var ctx = canvas.getContext(’2d’)ctx.drawImage(myImage, 50, 50, 100, 100)
ctx.drawImage(myImage, 125, 125, 200, 50)
ctx.drawImage(myImage, 210, 210, 500, 500)
图像裁剪
最后一个drawImage方法的功用是对图像进行裁剪。
drawImage(image,
sourceX,
sourceY,
sourceWidth,
sourceHeight,
destX,
destY,
destWidth,
destHeight)
参数很多,但基本上你可以把它想成从原图中取出一个矩形区域,然后把它画到画布上目标区域里。
因为是异步加载,所以有可能加载顺序并不是你所预期的。如果要按照预期的顺序加载,可以改为同步加载。或者增加一个延时代码,在每次加载之后sleep一段时间,确保一张图片加载完再加载下一张。必须等到图片完全加载后才能对其进行 *** 作, 浏览器通常会在页面脚本执行的同时异步加载图片。 如果试图在图片未完全加载之前就将其呈现到canvas 上,将不会显示任何图片. \x0d\x0a\x0d\x0avar img= new Image() \x0d\x0aimg.src = "bark.jpg" \x0d\x0a \x0d\x0a// 图片加载完后,将其显示在canvas 上 \x0d\x0aimg.onload = function () { \x0d\x0adrawCanvas() \x0d\x0a}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)