9.在canvas绘制图片和视频

文章详细介绍了HTML5canvasAPI中的drawImage方法,包括其用于在画布上绘制图片和视频的基本用法,以及不同参数如何控制图片位置、大小和裁剪。方法区分了基础绘制、缩放绘制和裁剪绘制三种应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drawImage

该方法主要用于在画布上绘制图片

参数1
绘制到上下文的元素。允许任何的画布图像源,例如:HTMLImageElement、SVGImageElement (en-US)、HTMLVideoElement、HTMLCanvasElement、ImageBitmap、OffscreenCanvas 或 VideoFrame (en-US)。

参数2(可选)
需要绘制到目标上下文中的,image 的矩形(裁剪)选择框的左上角 X 轴坐标。可以使用参数3或参数5语法来省略这个参数。

参数3(可选)
需要绘制到目标上下文中的,image 的矩形(裁剪)选择框的左上角 Y 轴坐标。可以使用参数3或参数5语法来省略这个参数。

参数4(可选)
需要绘制到目标上下文中的,image 的矩形(裁剪)选择框的宽度。如果不说明,整个矩形(裁剪)从坐标的 sx 和 sy 开始,到 image 的右下角结束。可以使用参数3或参数5语法来省略这个参数。使用负值将翻转这个图像。

参数5(可选)
需要绘制到目标上下文中的,image的矩形(裁剪)选择框的高度。使用负值将翻转这个图像。

参数6
image 的左上角在目标画布上 X 轴坐标。

参数7
image 的左上角在目标画布上 Y 轴坐标。

参数8
image 在目标画布上绘制的宽度。允许对绘制的 image 进行缩放。如果不说明,在绘制时 image 宽度不会缩放。注意,这个参数不包含在参数3语法中。

参数9
image 在目标画布上绘制的高度。允许对绘制的 image 进行缩放。如果不说明,在绘制时 image 高度不会缩放。注意,这个参数不包含在参数3语法中。

该方法的参数较多,参数之间互有影响,我们总体把他分为三种使用方式

1.基础绘制
let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
let imgEle = new Image()
imgEle.src = 'https://oss-stock5.xpccdn.com/prod/photo/46c575a77dc64f6cbd9cd595874686d0.jpg?x-oss-process=style/stock_photo_watermark'
imgEle.addEventListener('load', function() {
  // 第一种最简单的绘制
  // 参数1为图片路径
  // 参数2为图片位于画布的x坐标
  // 参数3为图片位于画布的y坐标
  ctx.drawImage(imgEle, 0, 0)
})

在这里插入图片描述

2.缩放绘制
let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
let imgEle = new Image()
imgEle.src = 'https://oss-stock5.xpccdn.com/prod/photo/46c575a77dc64f6cbd9cd595874686d0.jpg?x-oss-process=style/stock_photo_watermark'
imgEle.addEventListener('load', function() {
  // 第二种绘制(可以对原图进行缩放)
  // 参数1为图片路径
  // 参数2为图片位于画布的x坐标
  // 参数3为图片位于画布的y坐标
  // 参数4为图片放置画布上的宽度
  // 参数5为图片放置画布上的高度
  ctx.drawImage(imgEle, 0, 0, 500, 500)
})

在这里插入图片描述

3.裁剪绘制
let c1 = document.getElementById('c1')
let ctx = c1.getContext('2d')
let imgEle = new Image()
imgEle.src = 'https://oss-stock5.xpccdn.com/prod/photo/46c575a77dc64f6cbd9cd595874686d0.jpg?x-oss-process=style/stock_photo_watermark'
imgEle.addEventListener('load', function() {
  // 第三种绘制(可进行图片裁剪)
  // 参数1为图片路径
  // 参数2为图片裁剪点的x坐标
  // 参数3为图片裁剪点的y坐标
  // 参数4为图片裁剪的宽度
  // 参数5为图片裁剪点的高度
  // 参数6为图片位于画布的x坐标
  // 参数7为图片位于画布的y坐标
  // 参数8为图片放置画布上的宽度
  // 参数9为图片放置画布上的高度
  ctx.drawImage(imgEle, 200, 100, 500, 300, 0, 0, 500, 300)
})

在这里插入图片描述
视频的绘制与图片一样

let videoEle = document.createElement('video')
videoEle.src = 'https://us-stock5.xpccdn.com/ee53aa95-44e9-4da6-b236-34d8826be141.mp4'
document.querySelector('button').addEventListener('click', function () {
  videoEle.play()
})
videoEle.addEventListener('loadedmetadata', function () {
  drawVideo()
})
//需要注意的是需要完整绘制视频必须使用requestAnimationFrame不停绘制,否则只会显示开始的一帧图片。
function drawVideo() {
  ctx.drawImage(videoEle, 0, 0, 500, 500);
  requestAnimationFrame(drawVideo);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值