9.在canvas绘制图片和视频

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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于HTML5 Canvas遮罩的问题,可以通过以下步骤实现: 1. 首先创建一个Canvas元素,并设置其宽高与要显示的图片一致。 2. 加载要显示的背景图片,并在Canvas绘制。 3. 加载要做遮罩的图片,并在Canvas绘制。 4. 创建一个遮罩层,并设置其宽高与Canvas一致。 5. 使用Canvas的globalCompositeOperation属性,设置其值为destination-in。 6. 在遮罩层上绘制一个矩形,通过globalCompositeOperation属性的设置,将其与Canvas上的图片进行遮罩。 7. 最后将遮罩层绘制Canvas上即可。 以下是代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HTML5 Canvas遮罩</title> <style> canvas { border: 1px solid #ccc; } </style> </head> <body> <canvas id="canvas" width="600" height="400"></canvas> <script> var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); // 加载背景图片 var bgImg = new Image(); bgImg.src = "bg.jpg"; bgImg.onload = function() { ctx.drawImage(bgImg, 0, 0, canvas.width, canvas.height); // 加载要做遮罩的图片 var maskImg = new Image(); maskImg.src = "mask.png"; maskImg.onload = function() { // 在Canvas绘制遮罩的图片 ctx.drawImage(maskImg, 0, 0, canvas.width, canvas.height); // 创建遮罩层 var maskLayer = document.createElement("canvas"); maskLayer.width = canvas.width; maskLayer.height = canvas.height; var maskCtx = maskLayer.getContext("2d"); // 设置globalCompositeOperation属性 maskCtx.globalCompositeOperation = "destination-in"; // 在遮罩层上绘制矩形 maskCtx.fillRect(0, 0, canvas.width, canvas.height); // 将遮罩层绘制Canvas上 ctx.drawImage(maskLayer, 0, 0); } } </script> </body> </html> ``` 以上代码实现了一个简单的HTML5 Canvas遮罩效果,其中bg.jpg为背景图片,mask.png为要做遮罩的图片。通过遮罩层的绘制,实现了图片的透明遮罩效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值