为了账号安全,请及时绑定邮箱和手机立即绑定

第一种方法,只出现图片的左上角部分

var  canvasWidth = 1152;
var canvasHeight = 768;

var myCanvas = document.getElementById("myCanvas");
var context;
var image = new Image();
var scaleRange = document.getElementById("scaleRange");
var scale = scaleRange.value;

window.onload = function() {
myCanvas.width = canvasWidth;
myCanvas.height = canvasHeight;
if (myCanvas.getContext) {
context = myCanvas.getContext("2d");
image.src = "../../images/img-lg.jpg";
image.onload = function() {
//context.drawImage(image,0,0,canvasWidth,canvasHeight);
drawImageByScale(scale);
}
}

}


function drawImageByScale(scale){
var scaleImageWidth = canvasWidth * scale;
var scaleImageHeight = canvasHeight * scale;
var sx = scaleImageWidth/2 - canvasWidth/2;
var sy = scaleImageHeight/2 - canvasHeight/2;
context.drawImage(image,sx,sy,canvasWidth,canvasHeight,0,0,canvasWidth,canvasHeight)
}


代码里用的是老师的图,用第一种方法实现的时候将scale设置为1.0的时候只出现了图片的左上角的部分:

http://img1.sycdn.imooc.com//576509f60001f53b11930638.jpg

我个人认为这种实现方式是不是逻辑有点问题,因为image-lg.jpg的图像素本来就是canvas大小的三倍大,当将scale设置为1.0时,最后一句画图的方法是:context.drawImage(image,0,0,canvasWidth,canvasHeight,0,0,canvasWidth,canvasHeight)
}

所以从原图的0,0位置取得与canvas大小一样的部分显示在canvas中,所以出现了上图的结果。

不知道理解的对不对,希望大神们可以指点一二~


正在回答

3 回答

老师的第一种方法实现的有问题,sx和sy不是从原图上算得,是从放大后的图片算得,可以照着上一节ppt里的图,在纸上画一画,就能找到正确的实现。

不过我比较好奇,老师的代码不正确,页面的效果是怎么出来的?

0 回复 有任何疑惑可以回复我~
#1

希望林柚一健康快乐成长

老师用的图就是放大之后的,所以能正确显示
2022-09-21 回复 有任何疑惑可以回复我~

老师的第一种方法代码有误,你可以根据思路自己编写出来。

0 回复 有任何疑惑可以回复我~

图片处理思路是这样的:

1、用context.drawImage( img , x , y , dw , dh)方法绘制图像

2、让图像(放大或缩小后的图)的中心与画布中心重叠,即水平垂直居中——设置的top和left即为y,x。图像的大小和画布大小都已知,故很容易得到y,x。

然后context.drawImage( image , x , y , scaleImageWidth, scaleImageHeight);

你这里调用的方法是错误的!!!

1 回复 有任何疑惑可以回复我~
#1

lwhoho

他问第一种方法,你这个是第二种方法
2016-06-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

第一种方法,只出现图片的左上角部分

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信