首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何裁剪/使用globalCompositeOperation = "desination-out“从我的画布中排除2个圆?

使用globalCompositeOperation = "destination-out"可以从画布中排除两个圆。

globalCompositeOperation是HTML5 Canvas中的一个属性,用于设置绘图上下文中的合成操作。它可以控制新绘制的图形如何与已有的图形进行合成。

当设置globalCompositeOperation为"destination-out"时,新绘制的图形将会从已有的图形中排除。具体操作如下:

  1. 创建一个画布和绘图上下文:var canvas = document.createElement("canvas"); var ctx = canvas.getContext("2d");
  2. 绘制两个圆:ctx.beginPath(); ctx.arc(x1, y1, radius1, 0, 2 * Math.PI); ctx.fillStyle = "red"; ctx.fill(); ctx.beginPath(); ctx.arc(x2, y2, radius2, 0, 2 * Math.PI); ctx.fillStyle = "blue"; ctx.fill();
  3. 设置globalCompositeOperation为"destination-out":ctx.globalCompositeOperation = "destination-out";
  4. 绘制一个覆盖整个画布的矩形:ctx.fillRect(0, 0, canvas.width, canvas.height);
  5. 最后,将画布添加到页面中:document.body.appendChild(canvas);

这样,两个圆的重叠部分将会被从画布中排除,只剩下两个圆的非重叠部分。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)

腾讯云云服务器(CVM)是一种可随时扩展的云计算服务,提供高性能、可靠稳定的云服务器,适用于各类应用场景。您可以根据实际需求选择不同配置的云服务器,并通过腾讯云控制台进行管理和操作。

产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

canvas详细教程! ( 近1万字吐血总结)

大家好,我是潘潘。 今天为大家带来的是我已经写了很久了的canvas详细教程,按照文章的案例一个一个敲下来保证你可以学会绘制很多图案和动画,对入门canvas很有帮助!...沙拉查词 简单来说, 是HTML5中的标签,它是一个容器,可以使用JS在其中绘制图形或文字。...旋转 使用rotate(angle)方法以此时的画布原点为中心,顺时针旋转angle度。...裁剪 使用clip()方法从原始画布中剪切任意形状和尺寸。...注意:一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域),你也可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复

3.7K22

实现Web端自定义截屏

前言 当客户在使用我们的产品过程中,遇到问题需要向我们反馈时,如果用纯文字的形式描述,我们很难懂客户的意思,要是能配上问题截图,这样我们就能很清楚的知道客户的问题了。...聪明的开发者可能已经猜到了,这是QQ/微信的截图功能,我的开源项目正好做到了截图功能,在做之前我找了很多资料,没有发现web端有这种东西存在,于是我就决定参照QQ的截图自己实现一个并做成插件供大家使用。...在截图工具栏的布局上,一开始我的想法是直接在canvas画布中把这些工具画出来,这样应该更容易交互一点,但是我看了相关的api后,发现有点麻烦,把问题复杂化了。...琢磨了一阵后,想明白了,这块还是需要使用div进行布局的,在裁剪框绘制完毕后,根据裁剪框的位置信息计算出截图工具栏的位置,改变其位置即可。...我们来看下如何使用历史记录来解决这个问题。

2.5K30
  • 前端canvas基础复习,canvas学习笔记,持续记录

    /* * 从100,100,位置开始画一个半径为100的圆 * 向100,100,位置半径半径为10的圆,开始渐变色 * white从外层圆向内,渐变色到达内部圆圆边时停止 * 内部圆会被外层颜色自动扩散从而被填充...全局属性:globalAlpha、globalCompositeOperation。 填充、描边、剪切 不带fill、stroke的方法都只会在画布上产生路径状态,不会绘制实际图像。...4.使用多层画布去画一个复杂的场景 某些对象需要经常移动或更改,而其他对象则保持相对静态。在这种情况下,可能的优化是使用多个元素对您的项目进行分层。...键盘按下:keydown 键盘松开:keyup 3.循环事件 说起如何实现 Canvas 动画,大多数人想到的都是先使用 setInterval()来定时清空画布、然后重绘图形,从而达到动画的效果。...在 Canvas 中,对于圆来说,可以采用一种高精度的方法来捕获:判定鼠标与圆心之间的距离。

    2.4K40

    实现Web端自定义截屏

    前言 当客户在使用我们的产品过程中,遇到问题需要向我们反馈时,如果用纯文字的形式描述,我们很难懂客户的意思,要是能配上问题截图,这样我们就能很清楚的知道客户的问题了。...聪明的开发者可能已经猜到了,这是QQ/微信的截图功能,我的开源项目正好做到了截图功能,在做之前我找了很多资料,没有发现web端有这种东西存在,于是我就决定参照QQ的截图自己实现一个并做成插件供大家使用。...运行结果视频:实现web端自定义截屏 写在前面 本文插件的写法采用的是Vue3的compositionAPI,如果对其不了解的开发者请移步我的另一篇文章:使用Vue3的CompositionAPI来优化代码量...在截图工具栏的布局上,一开始我的想法是直接在canvas画布中把这些工具画出来,这样应该更容易交互一点,但是我看了相关的api后,发现有点麻烦,把问题复杂化了。...琢磨了一阵后,想明白了,这块还是需要使用div进行布局的,在裁剪框绘制完毕后,根据裁剪框的位置信息计算出截图工具栏的位置,改变其位置即可。

    2.5K20

    ​canvas 高级功能(中)

    canvas 高级功能(中) 在本文中,你将学习到 Canvas 提供的一些更高级的功能。本文将讲述如何合成、创建阴影使图形看起来更真实有趣。...本文内容非常精彩,我希望这些内容能够拓宽你的眼界,帮助你学会画布的高级功能。 1. 合成 canvas 高级功能(中)确实包括许多内容,祝贺你学完了这些知识。...在画布中绘制的所有东西都是已经合成的,这意味着绘制的所有内容都会与已经绘制的现有元素合并在一起。这实际上都是基本合成,只是将一些内容叠加到另一些内容之上。...我马上要介绍这些方面的合成,但是现在我们先了解一下画布中最简单的合成方法,即globalAlpha属性。 ❝注意:本节将介绍的两个全局合成属性都会影响到2D渲染上下文的绘图效果。...有一些操作(如 destination-out )在擦除画布上一些非矩形区域时是很有用的:例如,使用圆作为源。 2.

    84920

    撩妹技能 get,教你用 canvas 画一场流星雨

    上面几幅图我是在 ps 上模拟的,本质上 ps 也是在画布上绘画,我们马上在 canvas 上试试。 那,直接代码实现一下。...这里就要用到一个冷门的属性了,globalCompositeOperation,全局组合操作? 原谅我放荡不羁的翻译。 这个属性其实就是用来定义后绘制的图形与先绘制的图形之间的组合显示效果的。 ...注意这里的 destination-out 和 destination-in,示例中这两个属性最终都只有部分源图像保留了下来,符合我们只要保留流星的需求。...我觉得 w3cschool 上描述的不是很正确,我用我自己的理解概括一下。...destination-in :只保留了源图像(矩形)和目标图像(圆)交集区域的源图像 destination-out:只保留了源图像(矩形)减去目标图像(圆)之后区域的源图像 上述示例目标图像的透明度是

    95721

    HTML5 Canvas开发详解(4) -- 其他基础操作

    ,r1表示渐变开始圆的半径 //x2、y2表示渐变结束圆心的坐标,r2表示渐变结束圆的半径 let gnt = cxt.createRadialGradient(x1, y1, r1, x2, y2,...在Canvas中,我们可以使用save()方法来保存当前状态,然后可以使用restore()方法来恢复之前保存的状态。...3.2 clip()方法 在Canvas中,可以使用clip()方法结合基本图形的绘制来指定一个剪切区域。...语法: //type:表示输出的MIME类型,如果省略,将使用image/png类型 cnv.toDataURL(type); 使用toDataURL()方法可以将画布转换为data URL,data...语法: cxt.globalCompositeOperation = 属性值; 属性取值: globalCompositeOperation属性定义的是整个画布的全局叠加效果,也就是说,如果一个画布中有多个图形叠加

    65520

    鸿蒙元服务实战-笑笑五子棋(2)

    鸿蒙元服务实战-笑笑五子棋(2) 章节导读 本章节主要讲解如何创建元服务和使用 canvas 描绘图形 目标 上一章最后讲到了 笑笑五子棋 主要的技术栈如下: ArkTS API 12 Canvas 元服务独有的...基本使用 canvas 的基本使用分为 4 步: 设置是否抗锯齿抗锯齿(Anti - aliasing)是一种在数字图形处理中使用的技术,主要用于减少图像中因为像素有限而产生的锯齿状边缘的现象 创建画布上下文...lineDashOffset 设置画布的虚线偏移量,有默认值。 globalCompositeOperation 设置合成操作的方式,有可选值及默认值。...clip 可能用于设置裁剪区域,后续绘制内容只在裁剪区域内显示 reset12+ 从名称看可能是在特定版本(12+)中用于重置某些状态或设置的操作 saveLayer12+ 在特定版本(12+)里可能用于保存图层相关状态等操作...toDataURL 通常用于将画布等内容转换为可以表示图像数据的 URL 格式 restore 一般用于恢复之前保存的某些状态(如画布状态等) save 常用来保存当前画布等相关的状态,以便后续恢复使用

    5810

    canvas绘图基本使用方法(三)

    globalCompositeOperation: 设置或返回新图像如何绘制到已有的图像上,该方法有以下属性值: 值 描述 source-over 在目标图像上显示源图像(默认) source-atop...目标图像位于源图像之外的部分是不可见的 destination-in 在源图像中显示目标图像。...剪辑区域: clip()方法从原始画布中剪切任意形状和尺寸。 提示:一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。...您也可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复(通过 restore() 方法) 以下是用一个圆去截取一个矩形的示例: ?...除了上述的属性的和方法,还有以下等方法: drawImage(): 向画布上绘制图像、画布或视频。

    1K30

    Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布(下)

    icon 使用用于标记图标的字体。 menu 使用用于菜单中的字体(下拉列表和菜单列表)。 caption 使用标题控件的字体(比如按钮、下拉列表等)。...status-bar 使用用于窗口状态栏中的字体。 message-box 使用用于对话框中的字体。 small-caption 使用用于标记小型控件的字体。...img 规定要使用的图像、画布或视频。...x 在画布上放置图像的 x 坐标位置。 y 在画布上放置图像的 y 坐标位置。 w 要使用的图像的宽度。(伸展或缩小图像) h 要使用的图像的高度。...设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上 裁切 clip() 从原始画布中剪切任意形状和尺寸 案例 从画布中剪切 200*120 像素的矩形区域。

    1.3K70

    Canvas学习笔记,记录使用过程中遇到的一些问题

    2022-11-07 1.反向绘制 fill(),方法用于填充已有的闭合路径,假设有一个如下图的路径,默认情况下圆和方形都会被填充,最后的效果就是一个黑色的方形; demo 通过fillRule参数...允许的值: "nonzero": 非零环绕规则,默认的规则。 "evenodd": 奇偶环绕规则。 将填充规则设置为evenodd,绘制的结果会变为下面这样,通过这种方式可以实现反向裁剪。...设备像素比,它的计算方式是 物理像素 / 屏幕宽度的像素; 首先设置canvas的宽度和高度是原来的2倍 使用ctx.scale(2,2)设置绘制的东西也放大2倍 在canvas的父元素上使用缩放,使用...提示 canvas 绘图时,会从两个物理像素的中间位置开始绘制并向两边扩散 0.5 个物理像素。...函数可以从OffscreenCanvas对象的绘制内容创建一个ImageBitmap对象。

    94921

    邀你看一场浪漫的烟火 -- canvas放烟花

    漫天的烟火送给遥远的你 ?我裁一段星河送给你,好叫你不逊色这漫天烟火 ? 漫天的烟火,在这璀璨的星空中闪耀,成就了这片星空的绚丽,更散发出了自己无限的光芒,今天就使用canvas来做一个烟花效果吧!...创建 canvas画布 在js中先获取标签,设置画布大小,采用resize监听页面的调整,及时的改变画布的大小 // 元素获取 const canvas = document.querySelector...实现烟花散开 有了上面的铺垫,每一个小圆点都是即将要散开的烟花,那么我们只需要更新画布让它的半径不断的增大即可,实现散开的效果很简单,那部分代码就不贴了(节省篇幅),对于更新画布,采用的一个html5中的新方法...在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,会减少对内存的使用 requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成...,同时每个粒子的移动半径不断地减小,这样会形成向中间合拢的趋势,由于每个粒子都存放在数组当中,当粒子透明度小于0,从数组移除 8.

    2.4K50

    Canvas类的最全面详解 - 自定义View应用系列

    、思路不清晰、简单问题复杂化等等 今天,我将全面总结自定义View中的Canvas类的使用,我能保证这是市面上的最全面、最清晰、最易懂的 文章较长,建议收藏等充足时间再进行阅读 阅读本文前请先阅读...绘制圆 原理:圆心坐标+半径决定圆 具体使用 // 参数说明: // 1、2:圆心坐标 // 3:半径 // 4:画笔 // 绘制一个圆心坐标在(500,500),半径为400 的圆。...从示例可以发现: 不使用中心点:圆弧的形状 = (起、止点连线+圆弧)构成的面积 使用中心店:圆弧面积 = (起点、圆心连线 + 止点、圆心连线+圆弧)构成的面积 类似扇形 4.2.3...); 下面我将用一个实例去表示如何去使用: - 实例介绍 将坐标系移动到(450,650);绘制一个圆,将上述Canvas操作录制下来,并在某个时刻重新绘制出来。...,当这些区域有重叠的时候,这个参数决定重叠部分该如何处理,多次裁剪之后究竟获得了哪个区域,有以下几种参数: ?

    3.2K81

    Carson带你学Android:自定义View Canvas类使用教程

    、思路不清晰、简单问题复杂化等等 今天,我将全面总结自定义View中的Canvas类的使用,我能保证这是市面上的最全面、最清晰、最易懂 目录 1....绘制圆 原理:圆心坐标+半径决定圆 具体使用 // 参数说明: // 1、2:圆心坐标 // 3:半径 // 4:画笔 // 绘制一个圆心坐标在(500,500),半径为400 的圆。...); 下面我将用一个实例去表示如何去使用: 实例介绍 将坐标系移动到(450,650);绘制一个圆,将上述Canvas操作录制下来,并在某个时刻重新绘制出来。...,当这些区域有重叠的时候,这个参数决定重叠部分该如何处理,多次裁剪之后究竟获得了哪个区域,有以下几种参数: 以三个参数为例讲解: Region.Op.DIFFERENCE:显示第一次裁剪与第二次裁剪不重叠的区域...保存某个图层状态(saveLayer) 作用:新建一个图层,并放入特定的栈中 具体使用 使用起来非常复杂,因为图层之间叠加会导致计算量成倍增长,营尽量避免使用。

    2.4K10

    利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果

    image.png 可以看到中间线路里轨道的效果是非常炫酷的,那么本文的主要内容就是讲解如何在canvas上绘制出这种效果。...分析设计稿 先看看设计稿中的轨道效果 c4f2c4e2a06f40aea5a0b15022c94ae2_tplv-k3u1fbpfcp-zoom-1.jpg 程序员解决问题时经常喜欢用到的方法是把一个大问题拆解为若干个小问题然后逐一处理...根据设计稿我们可以看到这个线路实际上是由 外层的空心线+发光效果+内层的斑马线+倒影 组成的,所以我们要做的就是如何处理这几个小问题。...canvas上,再将离屏canvas绘制到页面的画布中 var tempCanvas = document.createElement("canvas"); tempCanvas.width = 800...CanvasRenderingContext2D.setLineDash() 离屏canvas技巧 可以看到想要达到好的效果还是不容易的,需要我们灵活配合使用多种绘制技巧,希望这篇文章能对大家有所帮助

    72320

    H5和微信小游戏 Canvas API 整理前言

    参数 描述 x0 渐变的开始圆的 x 坐标 y0 渐变的开始圆的 y 坐标 r0 开始圆的半径 x1 渐变的结束圆的 x 坐标 y1 渐变的结束圆的 y 坐标 r1 结束圆的半径 这个参数理解起来有点麻烦...从上图我们可以看出,渐变区域是由两个圆决定的,超出两个圆的区域,渐变停止,用外围像素填充。...() 从画布中裁剪出一个可视区域,只有被剪切区域内的像素才可见 quadraticCurveTo() 二次贝塞尔曲线 bezierCurveTo() 三阶贝塞尔曲线 arc() 创建圆弧 arcTo()...caption 使用标题控件的字体(比如按钮、下拉列表等)。 icon 使用用于标记图标的字体。 menu 使用用于菜单中的字体(下拉列表和菜单列表)。...message-box 使用用于对话框中的字体。 small-caption 使用用于标记小型控件的字体。 status-bar 使用用于窗口状态栏中的字体。

    2.9K41
    领券