canvas的drawImage方法参数详解

引言:

canvas很有意思的一项特性就是图像操作能力。可以用于动态的图像合成或者作为图形的背景,以及游戏界面(Sprites)等等。浏览器支持的任意格式的外部图片都可以使用,比如PNG、GIF或者JPEG。 你甚至可以将同一个页面中其他canvas元素生成的图片作为图片源。

一旦获得了源图对象,我们就可以使用 drawImage 方法将它渲染到 canvas 里。

drawImage 方法有三种形态:

drawImage(image, dx, dy) 在画布指定位置绘制原图
drawImage(image, dx, dy, dw, dh) 在画布指定位置上按原图大小绘制指定大小的图
drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) 剪切图像,并在画布上定位被剪切的部分

参数描述
image规定要使用的图像、画布或视频
sx可选。开始剪切图片的 x 坐标位置
sy可选。开始剪切图片的 y 坐标位置
sw可选。被剪切图像的宽度(就是裁剪之前的图片宽度,这里的宽度若小于图片的原宽。则图片多余部分被剪掉;若大于,则会以空白填充)
sh可选。被剪切图像的高度(就是裁剪之前的图片高度)
dx在画布上放置图像的 x 坐标位置
dy在画布上放置图像的 y 坐标位置
dw可选。要使用的图像的宽度(就是裁剪之后的图片高度,放大或者缩放)
dh可选。要使用的图像的高度(就是裁剪之后的图片高度,放大或者缩放)

 

看实例(源图片是120*120的)

drawImage(image, dx, dy) 在画布指定位置绘制原图

	var canvas = document.getElementById("canvas");
	canvas.width=240;
	canvas.height=240;
	var ctx=canvas.getContext("2d");
	
	var image = new Image();
	image.src="./images/head.jpeg";
	image.onload=function(){
		ctx.drawImage(this,0,0);
	}

效果如下

可以看到图片没有做任何的处理,直接从0,0位置绘制出来

 

drawImage(image, dx, dy, dw, dh) 在画布指定位置上按原图大小绘制指定大小的图

	var canvas = document.getElementById("canvas");
	canvas.width=240;
	canvas.height=240;
	var ctx=canvas.getContext("2d");
	
	var image = new Image();
	image.src="./images/head.jpeg";
	image.onload=function(){
		ctx.drawImage(this,0,0,240,240);
	}

效果如下

后面的两个参数,指定了绘制的长宽,这里都指定240,会把画布占满。


drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) 剪切图像,并在画布上定位被剪切的部分

	var canvas = document.getElementById("canvas");
	canvas.width=240;
	canvas.height=240;
	var ctx=canvas.getContext("2d");
	
	var image = new Image();
	image.src="./images/head.jpeg";
	image.onload=function(){
		ctx.drawImage(this,0,0,60,60,0,0,120,120);
	}

效果如下

图片被截取了左上角一部分,然后还放大显示长宽120

 

### 关于 HTML Canvas `drawImage` 方法的使用 #### 创建 Image 对象并设置源文件路径 为了在 Canvas 上显示一张图片,需要先创建一个新的 JavaScript 图像对象 (`new Image()`), 并为其指定一个 src 属性来定义要加载的图像资源的位置。 ```javascript const image = new Image(); image.src = 'path/to/image.png'; ``` #### 设置图像加载完成后的回调处理程序 当图像完全下载完毕之后再调用 `drawImage`, 可以确保不会因为网络延迟等原因而无法正常渲染。这通常通过监听图像对象的 load 事件实现[^1]。 ```javascript image.onload = function () { // 绘制逻辑放在这里面执行 }; ``` #### 调用 `drawImage` 函数绘制图像至画布 一旦确认图像已经成功载入, 接下来就可以利用上下文(context) 的 `drawImage` 方法把该图像放置到 canvas 当中去了。最简单的形式只需要提供三个参数:目标图像、X 坐标以及 Y 坐标即可[^4]。 ```javascript // 获取 canvas 元素及其绘图环境 (2D context) const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0); ``` 对于更复杂的场景,比如裁剪原图的一部分或者缩放到特定尺寸,则需要用到带有更多参数版本的 `drawImage` 方法: - **三参数版**: 如上述例子所示,仅需给出图像实例加上 X 和 Y 方向的目标起点。 - **五参数版**: 此外还可以加入宽度(width)和高度(height),用于控制最终呈现出来的大小。 - **九参数版**: 如果想要截取原始图形中的某一部分区域进行重映射的话,就需要额外指明源矩形四个角点坐标(sx,sy,swidth,sheight)[^2]. ```javascript // 使用五个参数调整图像大小 ctx.drawImage(image, 0, 0, 300, 200); // 或者使用全部九个参数来进行精确切割和平铺变换 ctx.drawImage( image, sourceXOffset, sourceYOffset, sourceWidth, sourceHeight, destXPos, destYPos, destinationWidth, destinationHeight ); ``` 以上就是有关如何运用 HTML5 Canvas API 下的 `drawImage` 功能的一些基本介绍与实践案例[^3]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程界小明哥

请博主喝瓶水,博主持续输出!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值