【canvas】3、使用图像、变形及裁切路径

6 篇文章 0 订阅

图像

引入图像到 canvas 里的两步基本操作:
1、获得一个指向HTMLImageElement的对象或者另一个 canvas 元素的引用作为源
2、使用drawImage()函数将图片绘制到画布上

获得需要绘制的图片

HTMLImageElement
这些图片是由Image()函数构造出来的,或者任何的元素
HTMLVideoElement
用一个 HTML 的 元素作为你的图片源,可以从视频中抓取当前帧作为一个图像
HTMLCanvasElement
可以使用另一个 元素作为你的图片源。
ImageBitmap
这是一个高性能的位图,可以低延迟地绘制,它可以从上述的所有源以及其它几种源中生成。

获得与 canvas 相同页面内的图片的引用:

document.images集合
document.getElementsByTagName()方法
如果你知道你想使用的指定图片的 ID,你可以用document.getElementById()获得这个图片

绘制图片

drawImage(image, x, y)
其中 image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标。

缩放 Scaling

drawImage(image, x, y, width, height)
这个方法多了 2 个参数:width 和 height,这两个参数用来控制 当向 canvas 画入时应该缩放的大小

切片 Slicing

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

前 4 个是定义图像源的切片位置和大小,后 4 个则是定义切片的目标显示位置和大小
imageSmoothingEnabled属性来控制是否在缩放图像时使用平滑算法。默认值为true,即启用平滑缩放

变形

绘制复杂图形时方法
save()
保存画布 (canvas) 的所有状态
restore()
save 和 restore 方法是用来保存和恢复 canvas 状态的,都没有参数。Canvas 的状态就是当前画面应用的所有样式和变形的一个快照。

  1. translate(x, y)
    translate 方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。

做变形之前先保存状态

  1. rotate(angle)
    这个方法只接受一个参数:旋转的角度 (angle),它是顺时针方向的,以弧度为单位的值

  2. 缩放 Scaling
    scale(x, y)
    scale 方法可以缩放画布的水平和垂直的单位。两个参数都是实数,可以为负数,x 为水平缩放因子,y 为垂直缩放因子,如果比 1 小,会缩小图形,如果比 1 大会放大图形。默认值为 1,为实际大小
    scale(1,-1); 以 y 轴作为对称轴镜像反转

  3. 变形 Transforms
    transform(a, b, c, d, e, f)
    这个方法是将当前的变形矩阵乘上一个基于自身参数的矩阵,如下面的矩阵所示:[
    a c e
    b d f
    0 0 1
    ]

a (m11) 水平方向的缩放 b(m12) 竖直方向的倾斜偏移 c(m21) 水平方向的倾斜偏移 d(m22) 竖直方向的缩放 e(dx)
水平方向的移动 f(dy) 竖直方向的移动

setTransform(a, b, c, d, e, f)
这个方法会将当前的变形矩阵重置为单位矩阵,然后用相同的参数调用 transform 方法。如果任意一个参数是无限大,那么变形矩阵也必须被标记为无限大

裁切路径

clip()
将当前正在构建的路径转换为当前的裁剪路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Canvas 图像的擦除和修补功能,你可以使用以下方法: 图像擦: 1. 使用 `globalCompositeOperation` 属性:将 `globalCompositeOperation` 属性设置为 `"destination-out"`,这将使绘制的内容被擦除掉。 ```javascript context.globalCompositeOperation = "destination-out"; ``` 然后使用鼠标或触摸事件监听器来绘制,这将以擦除的方式删除画布上的内容。 图像修补: 1. 使用保存的原始图像进行修补:在擦除部分之后,将保存的原始图像重新绘制在擦除的位置上。 下面是一个简单的示例代码,演示了如何实现图像的擦除和修补: ```html <canvas id="myCanvas" width="400" height="400"></canvas> <button onclick="erase()">擦除</button> <button onclick="repair()">修补</button> <script> const canvas = document.getElementById("myCanvas"); const context = canvas.getContext("2d"); let isErasing = false; let backgroundImage = new Image(); let originalImage = null; // 加载背景图像 backgroundImage.src = "path_to_image.jpg"; // 替换为你的背景图像路径 backgroundImage.onload = function () { context.drawImage(backgroundImage, 0, 0); originalImage = context.getImageData(0, 0, canvas.width, canvas.height); }; canvas.addEventListener("mousedown", startDrawing); canvas.addEventListener("mousemove", draw); canvas.addEventListener("mouseup", stopDrawing); canvas.addEventListener("mouseout", stopDrawing); function startDrawing(e) { isErasing = true; context.beginPath(); context.moveTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop); } function draw(e) { if (!isErasing) return; context.lineTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop); context.stroke(); } function stopDrawing() { isErasing = false; } function erase() { context.globalCompositeOperation = "destination-out"; } function repair() { context.globalCompositeOperation = "source-over"; context.putImageData(originalImage, 0, 0); } </script> ``` 在上述示例中,当你按下鼠标按钮并移动鼠标时会出现擦除效果,松开鼠标按钮后,你可以继续使用画笔进行绘制。要擦除画布上的内容,可以点击 "擦除" 按钮来调用 `erase()` 函数,要修补图像,可以点击 "修补" 按钮来调用 `repair()` 函数。当点击修补按钮时,原始图像会重新绘制在画布上,覆盖掉之前擦除的内容。请注意,`path_to_image.jpg` 需要替换为你的背景图像路径

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值